Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Параллельное выполнение запросов  [new]
webness
Member

Откуда:
Сообщений: 32
Здравствуйте.

Не могу понять поведение SQL Server'а, подскажите, пожалуйста.

Есть запросы вида:
SELECT SUM(Weight*Count) FROM Steps  WHERE (Date in ('2011-04-01', ...........)) AND (IdStepper in (15, 21, .....)) AND (Building in (71)) 

Список дат обычно большой, IdStepper тоже — покрывает почти все уникальные IdStepper в таблице, Building же всегда одна или несколько. Построены индексы, они улучшают быстродействие, но как ни крути, нужно просмотреть почти всю таблицу.

Есть сервис, который создает несколько асинхронных запросов к базе, скажем, параллельно 4 (на 4-х ядерном процессоре),
когда один запрос завершен — он делает следующий, общее кол-во, скажем, 1000.

От запроса к запросу меняется только Building.

При этом, как показывает Activity Monitor в Resource Waits, Wait Time больше всего у категории Compilation.
И получается так, что при этом занято всего одно ядро, а остальные запросы в очереди.

Если посчитать эту 1000, а потом запустить расчет еще раз - тогда нагрузка 100%, даже если изменить
данные в таблице, при этом компиляции не происходит.

Подскажите, как все-таки заставить компилироваться запросы параллельно, ведь ресурсы для этого есть?

Следующее найденное сообщение
31 май 11, 12:54    [10738004]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение запросов  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
webness
Список дат обычно большой

webness
При этом, как показывает Activity Monitor в Resource Waits, Wait Time больше всего у категории Compilation

А вы чего хотели-то?
31 май 11, 12:59    [10738050]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение запросов  [new]
Glory
Member

Откуда:
Сообщений: 104751
webness
При этом, как показывает Activity Monitor в Resource Waits, Wait Time больше всего у категории Compilation.
И получается так, что при этом занято всего одно ядро, а остальные запросы в очереди.

- Откуда вы видите, что они в очереди ?
- Первоначальная компиляция ничем не лечится. Нужно использовать параметры, чтобы сервер смог повторно использовать уже скомпилированные планы
BOL - Execution Plan Caching and Reuse
31 май 11, 13:00    [10738070]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение запросов  [new]
webness
Member

Откуда:
Сообщений: 32
Сергей Алексеевич, я понимаю, что на компиляцию больше всего уходит времени.
Вопрос в том, почему он НЕ загружает все четыре ядра процессора, а ставит эти запросы в очередь.

Glory, вижу, что в очереди - висят в Activity Monitor Wait Tasks, ровно по кол-во запросов.

Про параметры — как лучше передать массив параметров?
Table-Valued Parameters использовать, как тут рекомендую? http://www.sommarskog.se/arrays-in-sql-2008.html
31 май 11, 14:17    [10738778]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение запросов  [new]
Glory
Member

Откуда:
Сообщений: 104751
webness
Сергей Алексеевич, я понимаю, что на компиляцию больше всего уходит времени.
Вопрос в том, почему он НЕ загружает все четыре ядра процессора, а ставит эти запросы в очередь.

Потому что заблокированному коннекту невозможно выполняться. Хоть сколько процессоров будет свободно

webness
Glory, вижу, что в очереди - висят в Activity Monitor Wait Tasks, ровно по кол-во запросов.

И какого ресурса они ожидают ?
31 май 11, 14:31    [10738896]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение запросов  [new]
webness
Member

Откуда:
Сообщений: 32
Судя по Resource Waits - Compilation.
31 май 11, 14:56    [10739121]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение запросов  [new]
Glory
Member

Откуда:
Сообщений: 104751
webness
Судя по Resource Waits - Compilation.

Они заблокированы ?
31 май 11, 14:58    [10739143]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение запросов  [new]
webness
Member

Откуда:
Сообщений: 32
Glory
webness
Судя по Resource Waits - Compilation.

Они заблокированы ?


А как это можно понять или где посмотреть? На сервере, где я счас могу проверить, стоит Express-версия, возможно, там
не все есть.
31 май 11, 15:10    [10739309]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение запросов  [new]
Glory
Member

Откуда:
Сообщений: 104751
webness
Glory
пропущено...

Они заблокированы ?


А как это можно понять или где посмотреть? На сервере, где я счас могу проверить, стоит Express-версия, возможно, там
не все есть.

Статус у коннектов какой ?
31 май 11, 15:13    [10739342]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение запросов  [new]
webness
Member

Откуда:
Сообщений: 32
Glory
webness
пропущено...


А как это можно понять или где посмотреть? На сервере, где я счас могу проверить, стоит Express-версия, возможно, там
не все есть.

Статус у коннектов какой ?

Извиняюсь за незнание, но все же - где посмотреть можно?
Или что имеется в виду?
31 май 11, 15:15    [10739359]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение запросов  [new]
Glory
Member

Откуда:
Сообщений: 104751
webness
Glory
пропущено...

Статус у коннектов какой ?

Извиняюсь за незнание, но все же - где посмотреть можно?
Или что имеется в виду?

Имеется ввиду поле статус там, где "вижу, что в очереди - висят в Activity Monitor Wait Tasks"
31 май 11, 15:17    [10739381]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение запросов  [new]
Glory
Member

Откуда:
Сообщений: 104751
А также blocked by/blocking
31 май 11, 15:20    [10739402]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение запросов  [new]
webness
Member

Откуда:
Сообщений: 32
Glory
webness
пропущено...

Извиняюсь за незнание, но все же - где посмотреть можно?
Или что имеется в виду?

Имеется ввиду поле статус там, где "вижу, что в очереди - висят в Activity Monitor Wait Tasks"


К сожалению, у меня там только график с количеством, и все. Видимо, из-за экспресс-версии.
31 май 11, 15:21    [10739409]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение запросов  [new]
Glory
Member

Откуда:
Сообщений: 104751
webness
Glory
пропущено...

Имеется ввиду поле статус там, где "вижу, что в очереди - висят в Activity Monitor Wait Tasks"


К сожалению, у меня там только график с количеством, и все. Видимо, из-за экспресс-версии.

Activity Monitor - эта плоский грид со списком коннектов
А график - это report-ы. И названия у них просто начинаются с Activity
31 май 11, 15:25    [10739444]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение запросов  [new]
webness
Member

Откуда:
Сообщений: 32
Если я правильно понял, то статус - Suspended, a Wait Type - RESOURCE_SEMAPHORE_QUERY_COMPILE.

Glory, вообще я применил Ваш совет насчет процедур - все стало замечательно.

У меня изначально было заблуждение в том, что подготовка данных для процедур будет занимать столько же
времени, сколько и компиляция. Оказался неправ.

Использовал процедуру, а данные к ней передавал методом, описаным тут: http://www.sommarskog.se/arrays-in-sql-2008.html

Счас все просто летает и в Resource Waits разве что Logging висит.

Большое спасибо :)
31 май 11, 19:07    [10741201]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить