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

Откуда:
Сообщений: 8
Добрый день
Стоит задача конвертации данных в базе. Конвертация представляет собой файл, содержащий много запросов UPDATE не связанных между собой.
Если ли какие-нибудь утилиты, которые помогут выполнять эти запросы не один за другим, а одновременно, с заданием кол-ва одновременно работающих потоков?(запросы все занимают разное время, т.е. способ просто разбить на несколько сессий не устроит, так как не понятно, как получить эквивалентные сессии)
Нужно собственно ускорить процесс
30 июл 11, 02:01    [11047993]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение нескольких запросов  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2680
DBTracer
Нужно собственно ускорить процесс
а вы мониторили загрузку ЦП при выполнении вашей задачки?
хе-хе. если загрузка 100%, то параллелить смысла нет.
дважды хе-хе. Если загрузка совсем не 100%, то дело в дисковой подсистеме. Параллельные потоки данных как правило негативно сказываются на работе дисков. (ну, только разве что если "не связанные" запросы работают с разными файлгруппами)

Если же нет, то в случае insert ускорить можно BULK операциями.
Если BULK невозможен, то вместо
insert into x (fld) values(val)
insert into x (fld) values(val)
insert into x (fld) values(val)
надо говорить
insert into x (fld) select val
union all select val
union all select val

еще стараться выпихивать по несколько атомарных запросов в одном батче,
и не забывать оборачивать атомарные запросы транзакцией.
30 июл 11, 03:20    [11048068]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение нескольких запросов  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2680
как вариант - можно запустить пару тяжелых запросов параллельно, потом последовательно, и оценить бонусы параллельной обработки.

параллельно вероятно имеет смысл запускать только что-то типа:
select t1.fld1, fn_1(t1.fld2), fn_2(t2.fld3) from tab1 t1 inner join tab2 t2 on fn_3(t1.ID)=fn_4(t2.ID)
Ну просто потому что настолько нехорошие запромы интенсивно грузят ядро.
30 июл 11, 03:29    [11048073]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение нескольких запросов  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
DBTracer
много запросов UPDATE не связанных между собой


С блокировками могут быть проблемы, если запускать из нескольких сессий.
30 июл 11, 09:24    [11048133]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение нескольких запросов  [new]
DBTracer
Member

Откуда:
Сообщений: 8
Ну запросы все идут по разным таблицам, так что блокировки в части данных исключены
Загрузка процессора небольшая, все думаю все упирается в диски(используется raid из 14 дисков)
Про bulk insert не понял, запросы только update.
Если взять любую утилиту тестирования дисков, то она показывает большее значение производительности дисков при многопоточном задании, отсюда делаю вывод что и паралельное выполнение даст выигрыш
30 июл 11, 10:50    [11048168]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение нескольких запросов  [new]
Верблюд
Member

Откуда: Яженичеловек!!!
Сообщений: 65007
DBTracer
выполнять запросы не один за другим, а одновременно


Service Broker.
31 июл 11, 16:20    [11050053]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение нескольких запросов  [new]
aleks2
Guest
DBTracer
Добрый день
Если ли какие-нибудь утилиты, которые помогут выполнять эти запросы не один за другим, а одновременно, с заданием кол-ва одновременно работающих потоков?(запросы все занимают разное время, т.е. способ просто разбить на несколько сессий не устроит, так как не понятно, как получить эквивалентные сессии)
Нужно собственно ускорить процесс

1. Загрузите свои "запросы UPDATE" во вспомогательную таблицу. По одному запросу в одну строку таблицы.
2. Запустите процедуру, которая будет выполнять очередной запрос из таблицы и помечать его выполненным.
3. Запустите ишо один экземпляр процедуры.
4. Запустите стока экземпляров процедуры... скока нада.

ЗЫ. И нафег утилит не нада.
31 июл 11, 16:44    [11050070]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение нескольких запросов  [new]
Верблюд
Member

Откуда: Яженичеловек!!!
Сообщений: 65007
aleks2
1. Загрузите свои "запросы UPDATE" во вспомогательную таблицу. По одному запросу в одну строку таблицы.
2. Запустите процедуру, которая будет выполнять очередной запрос из таблицы и помечать его выполненным.
3. Запустите ишо один экземпляр процедуры.
4. Запустите стока экземпляров процедуры... скока нада.


1. CREATE QUEUE... ACTIVATION (PROCEDURE = ..., MAX_QUEUE_READERS = xxx)
1a. SEND ...
2, 3, 4 - автоматом запустится нужное число копий, ограниченное xxx.
31 июл 11, 21:58    [11050526]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение нескольких запросов  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2680
DBTracer
Если взять любую утилиту тестирования дисков, то она показывает большее значение производительности дисков при многопоточном задании, отсюда делаю вывод что и паралельное выполнение даст выигрыш
Вот и озьмите лучше утилиту под названием MSSQL.
И прогоните в ней параллельно и последовательно пяток тяжелых UPDATE запросов (реальных, не синтетических).
Вот и будет ответ о целесообразности распараллеливания.
3 авг 11, 00:53    [11062099]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить