Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Распараллеливание запроса на MS SQL 2000 и MS SQL 2005  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Гость333
Andrey_od
m.Number2 like ('%'+g.Number)


Попробуйте переписать запрос так:
bla-bla-bla

Мда, тут я что-то оплошал, предложенный мной запрос вовсе не равнозначен первоначальному.

В общем, надо бы данные нормализовать...
21 май 13, 13:45    [14326526]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание запроса на MS SQL 2000 и MS SQL 2005  [new]
Andrey_od
Member

Откуда:
Сообщений: 25
Гость333,

Бог с ней с этой нормализацией.
в принципе устраивала скорость достигнутая на старой машинке,
я не пойму почему на новой не хочет параллелить.

Вот в чем вопрос, как говорил известный персонаж.
21 май 13, 16:55    [14328434]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание запроса на MS SQL 2000 и MS SQL 2005  [new]
Glory
Member

Откуда:
Сообщений: 104760
Andrey_od
я не пойму почему на новой не хочет параллелить.

Слишком разные версии серверов. Имхо.
Дело даже не в параллелизме, а в разных подходах оптимизатора.
На старом сервере использованы только некластерные индексы, а на новом - только кластерные.

Сообщение было отредактировано: 21 май 13, 17:11
21 май 13, 17:09    [14328599]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание запроса на MS SQL 2000 и MS SQL 2005  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Andrey_od,

Ну можно попробовать, например, явно указать индексы как в плане для 2000:
Select <некоторые поля всех 3-х таблиц>
into javaDb.dbo.tempbd_data
from (javaDB.dbo.Data2 m with (index(IX_xxxx)) left outer join javaDB.dbo.corp c with(index(IX_Corp)) on m.Number = c.Number) 
right outer join javaDb.dbo.dbGroup_test_new g on m.Number2 like ('%'+g.Number)

Посмотреть на полученный план — стал ли он похож на план для 2000, появился ли параллелизм.
21 май 13, 17:10    [14328601]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание запроса на MS SQL 2000 и MS SQL 2005  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Andrey_od
m.Number2 like ('%'+g.Number)

Есть ещё вариант — переделать это условие на такое:
reverse(m.Number2) like reverse(g.Number) + '%'

Построить индекс по reverse(m.Number2), тогда можно будет использовать поиск по этому индексу.
21 май 13, 17:22    [14328699]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание запроса на MS SQL 2000 и MS SQL 2005  [new]
Andrey_od
Member

Откуда:
Сообщений: 25
Glory
Andrey_od
я не пойму почему на новой не хочет параллелить.

Слишком разные версии серверов. Имхо.
Дело даже не в параллелизме, а в разных подходах оптимизатора.
На старом сервере использованы только некластерные индексы, а на новом - только кластерные.


Первые два пункта согласен.
Третий ошибка - индексы не менялись. В таблицах id только кластерные, а сравниваемые поля "unique"
21 май 13, 17:23    [14328712]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание запроса на MS SQL 2000 и MS SQL 2005  [new]
Glory
Member

Откуда:
Сообщений: 104760
Andrey_od
Третий ошибка - индексы не менялись.

И что. Наличие индекса не обязыает оптимизатор его использовать.
21 май 13, 17:24    [14328725]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание запроса на MS SQL 2000 и MS SQL 2005  [new]
Andrey_od
Member

Откуда:
Сообщений: 25
Гость333
reverse(m.Number2) like reverse(g.Number) + '%'

Построить индекс по reverse(m.Number2), тогда можно будет использовать поиск по этому индексу.


Интересный подход, т.е. создать два индекса по одному полю?
В прямом и обратном направлении? Никогда не использовал такой прием.
21 май 13, 17:28    [14328771]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание запроса на MS SQL 2000 и MS SQL 2005  [new]
Andrey_od
Member

Откуда:
Сообщений: 25
Glory
Andrey_od
Третий ошибка - индексы не менялись.


...
На старом сервере использованы только некластерные индексы, а на новом - только кластерные.
...

И что. Наличие индекса не обязыает оптимизатор его использовать.



Слово "использованы" я трактовал в контексте: присутствуют в таблицах на новом серваке, а не в применении к оптимизатору.

Хм, есть способ заставить его использовать?
21 май 13, 17:33    [14328816]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание запроса на MS SQL 2000 и MS SQL 2005  [new]
Glory
Member

Откуда:
Сообщений: 104760
Andrey_od
Слово "использованы" я трактовал в контексте: присутствуют в таблицах на новом серваке, а не в применении к оптимизатору.

А я говорил о ваших планах выполнения

Andrey_od
Хм, есть способ заставить его использовать?

Вам уже показали
21 май 13, 17:36    [14328838]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание запроса на MS SQL 2000 и MS SQL 2005  [new]
Andrey_od
Member

Откуда:
Сообщений: 25
Гость333,

Вот план после изменения запроса с использованием index

К сообщению приложен файл. Размер - 32Kb
21 май 13, 18:45    [14329192]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание запроса на MS SQL 2000 и MS SQL 2005  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Andrey_od,

А можно увидеть текстовые планы для SQL 2000 и для SQL 2005?
21 май 13, 19:06    [14329275]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание запроса на MS SQL 2000 и MS SQL 2005  [new]
Andrey_od
Member

Откуда:
Сообщений: 25
Гость333,

Для 2005 удалось получить.
А для 2000 нет set showplat_text on показывает план ввиде картинки

К сообщению приложен файл (3.txt - 2Kb) cкачать
22 май 13, 15:01    [14333404]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание запроса на MS SQL 2000 и MS SQL 2005  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Andrey_od
для 2000 нет set showplat_text on

Есть: http://msdn.microsoft.com/en-us/library/aa259226(v=sql.80).aspx
BOL
SET SHOWPLAN_TEXT

SQL Server 2000

Causes Microsoft® SQL Server™ not to execute Transact-SQL statements. Instead, SQL Server returns detailed information about how the statements are executed.
22 май 13, 15:11    [14333504]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание запроса на MS SQL 2000 и MS SQL 2005  [new]
Andrey_od
Member

Откуда:
Сообщений: 25
Гость333,

Я то прочитал, только не так использовал :)
В 2005 просто опцию включил и нажимай себе кнопочку показать план :)

Результат на 2000 во вложении

К сообщению приложен файл (4.txt - 1Kb) cкачать
22 май 13, 15:35    [14333747]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание запроса на MS SQL 2000 и MS SQL 2005  [new]
Exproment
Member

Откуда:
Сообщений: 416
Andrey_od, сравните "max degree of parallelism" и "max worker threads" на обоих серверах. они различаются ?

P.S. не могу найти старую статью про принудительное распараллеливание, где-то сохранил, чтоб потом прочитать (
22 май 13, 18:23    [14335082]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание запроса на MS SQL 2000 и MS SQL 2005  [new]
komrad
Member

Откуда:
Сообщений: 5249
Exproment,

option (maxdop N)
22 май 13, 18:27    [14335110]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание запроса на MS SQL 2000 и MS SQL 2005  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Exproment
принудительное распараллеливание

Для принудительного распараллеливания достаточно дописать в конце запроса OPTION(querytraceon 8649). Естественно, параллельный план будет построен, только если оптимизатор считает, что таковой план в принципе возможен.
22 май 13, 18:30    [14335125]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание запроса на MS SQL 2000 и MS SQL 2005  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Гость333
Для принудительного распараллеливания достаточно дописать в конце запроса OPTION(querytraceon 8649).

Исправляюсь — этого не достаточно, если на уровне сервера установлено max degree of parallelism=1. Тогда надо дописывать OPTION(maxdop N, querytraceon 8649).
22 май 13, 18:33    [14335133]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание запроса на MS SQL 2000 и MS SQL 2005  [new]
Andrey_od
Member

Откуда:
Сообщений: 25
Коллеги, я по-моему добился своего!

Не хочу загадывать, посмотрю на время выполнения, НО в плане появилось фраза Parallelism, при чем целых две.
Метод дебильный. Не ожидал :)

Запрос огромный, потому проверю утром. тьфу-тьфу-тьфу.
22 май 13, 18:55    [14335203]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание запроса на MS SQL 2000 и MS SQL 2005  [new]
Andrey_od
Member

Откуда:
Сообщений: 25
Как Вы думаете, как изменился запрос, чтобы план стал таким?
;)

К сообщению приложен файл. Размер - 27Kb
24 май 13, 12:08    [14343890]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание запроса на MS SQL 2000 и MS SQL 2005  [new]
komrad
Member

Откуда:
Сообщений: 5249
Andrey_od
Как Вы думаете, как изменился запрос, чтобы план стал таким?
;)


а Вы считаете что именно сейчас он оптимален?
24 май 13, 12:18    [14343979]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание запроса на MS SQL 2000 и MS SQL 2005  [new]
Glory
Member

Откуда:
Сообщений: 104760
Andrey_od
Как Вы думаете, как изменился запрос, чтобы план стал таким?

Параметры сессии )
24 май 13, 12:19    [14343990]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание запроса на MS SQL 2000 и MS SQL 2005  [new]
Andrey_od
Member

Откуда:
Сообщений: 25
komrad,

Когда запрос выполнялся на одном ядре, время выполнения составило более 8 часов (уже не хочу еще раз проверять)
Текущий запрос на 3 ядрах выполняется за время меньше 2 часов.
24 май 13, 13:09    [14344576]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание запроса на MS SQL 2000 и MS SQL 2005  [new]
komrad
Member

Откуда:
Сообщений: 5249
Andrey_od
Текущий запрос на 3 ядрах выполняется за время меньше 2 часов.

любопытно, спасибо
24 май 13, 13:31    [14344788]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить