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

Откуда:
Сообщений: 29
В общем есть технология конвертации данных разработчика, один из этапов предполагает выполнение следующей вещи
Есть курсор, который отбирает конвертируемые объекты, затем выполняет Хранимку для каждого их них. В процессе работы, в начале все идет быстро, но ближе к концу записей, процесс начинает ДИКО тормозить и время обработки последующих записей растет в геометрической прогрессии.
Вот статистика, как видно первую 1000 обработали за МИНУТУ, в последнюю обрабатывали более двух часов
22:30:49 Найдено записей 14833
22:31:48 Добавлено 1000 записей. Всего 1000
22:33:31 Добавлено 1000 записей. Всего 2000
22:35:14 Добавлено 1000 записей. Всего 3000
22:36:29 Добавлено 1000 записей. Всего 4000
22:42:30 Добавлено 1000 записей. Всего 5000
22:55:24 Добавлено 1000 записей. Всего 6000
23:15:01 Добавлено 1000 записей. Всего 7000
23:42:20 Добавлено 1000 записей. Всего 8000
00:16:55 Добавлено 1000 записей. Всего 9000
01:58:54 Добавлено 1000 записей. Всего 10000
03:49:11 Добавлено 1000 записей. Всего 11000
05:51:30 Добавлено 1000 записей. Всего 12000
07:48:17 Добавлено 1000 записей. Всего 13000
10:04:29 Добавлено 1000 записей. Всего 14000


Коллеги, в чем может быть проблема?
Сам запрос и планы оптимальные, может дело в дисковой системе? Какие могут быть варианты?
Во вложении скриншот процесса снятый ХП sp_whoisactive, значения Reads и CPU какие-то нереальные?

К сообщению приложен файл. Размер - 2Kb
27 фев 14, 14:25    [15639858]     Ответить | Цитировать Сообщить модератору
 Re: Производительность курсора при большом количестве обрабатываемых записей  [new]
Crimean
Member

Откуда:
Сообщений: 13148
а курсор как определяется?
27 фев 14, 14:43    [15640024]     Ответить | Цитировать Сообщить модератору
 Re: Производительность курсора при большом количестве обрабатываемых записей  [new]
Nigg
Member

Откуда:
Сообщений: 29
Тип курсор? Если это имелось ввиду то insensitive cursor for
27 фев 14, 14:51    [15640093]     Ответить | Цитировать Сообщить модератору
 Re: Производительность курсора при большом количестве обрабатываемых записей  [new]
Crimean
Member

Откуда:
Сообщений: 13148
еще точнее :) static / dynamic / keyset / ... ?
проблемы могут быть 2 - фетчи тормозить начинают (кроме статика) или сама хранимка
собственно, профайлер-то все и покажет, смотрели?
27 фев 14, 15:40    [15640677]     Ответить | Цитировать Сообщить модератору
 Re: Производительность курсора при большом количестве обрабатываемых записей  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
Nigg
затем выполняет Хранимку для каждого их них.
Хранимка кривая просто.
27 фев 14, 15:43    [15640715]     Ответить | Цитировать Сообщить модератору
 Re: Производительность курсора при большом количестве обрабатываемых записей  [new]
Nigg
Member

Откуда:
Сообщений: 29
Гавриленко Сергей Алексеевич,
А каким образом она отрабатывает для 1000 записей за минуту тогда? В чем проблема хранимки может быть? Ведь проблемы только в цикле.
27 фев 14, 16:51    [15641539]     Ответить | Цитировать Сообщить модератору
 Re: Производительность курсора при большом количестве обрабатываемых записей  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Nigg,
вам намекнули,что может стоит подумать и уйти от цикла ? Все таки построчная обработка - ето не самое хорошее что можно придумать в скл
27 фев 14, 16:54    [15641559]     Ответить | Цитировать Сообщить модератору
 Re: Производительность курсора при большом количестве обрабатываемых записей  [new]
Nigg
Member

Откуда:
Сообщений: 29
Maxx, технология конвертации не наша, в той хранимке вызывается еще куча разных хранимок. Разработчик утверждает что дело в нашем "сервере", т.к. эта же технология у других клиентов работает нормально. Как доказать что дело в коде? Правда ли при больших объемах скорость обработки каждой последующей записи уменьшается?
28 фев 14, 09:44    [15644211]     Ответить | Цитировать Сообщить модератору
 Re: Производительность курсора при большом количестве обрабатываемых записей  [new]
Glory
Member

Откуда:
Сообщений: 104760
Nigg
технология конвертации не наша, в той хранимке вызывается еще куча разных хранимок.

а в них наверное создается и дропается куча временных таблиц ?
28 фев 14, 10:27    [15644413]     Ответить | Цитировать Сообщить модератору
 Re: Производительность курсора при большом количестве обрабатываемых записей  [new]
Nigg
Member

Откуда:
Сообщений: 29
Glory, я сейчас посмотрел, таблицы не создаются и не дропаются там.
28 фев 14, 11:27    [15644851]     Ответить | Цитировать Сообщить модератору
 Re: Производительность курсора при большом количестве обрабатываемых записей  [new]
Maxx
Member [скрыт]

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

как вариант посмотрите на предмет begin tran в процедурах у вас..бо похоже ,что у вас на все 1 баольшая транзакция..а не куча мелких
28 фев 14, 11:50    [15645069]     Ответить | Цитировать Сообщить модератору
 Re: Производительность курсора при большом количестве обрабатываемых записей  [new]
Speshuric
Member

Откуда: г. Москва
Сообщений: 129
Nigg
Maxx, технология конвертации не наша, в той хранимке вызывается еще куча разных хранимок. Разработчик утверждает что дело в нашем "сервере", т.к. эта же технология у других клиентов работает нормально. Как доказать что дело в коде? Правда ли при больших объемах скорость обработки каждой последующей записи уменьшается?


В общем случае для "однопоточной" загрузки примерно так:
1. Снимаем трассу, события SP:StmtCompleted и SQL:StmtCompleted, анализируем Duration, Reads, Writes, CPU - ищем "подозреваемого". За счет того, что смотрим именно это событие - видим конкретный запрос, а не общие слова.
2. Локализуем место тяжёлого запрос при помощи событий SQL:BatchCompleted, RPC:Completed, SP:Completed.
3. Натравливаем "прицельно" уже только на этот запрос трассу с SP:StmtCompleted, SQL:StmtCompleted и Showplan XML Statistics Profile.
4. Смотрим почему план неэффективен, почему время зависит от добавленных записей.
5. Показываем анализ программистам, предлагаем решение.
28 фев 14, 11:51    [15645073]     Ответить | Цитировать Сообщить модератору
 Re: Производительность курсора при большом количестве обрабатываемых записей  [new]
Nigg
Member

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

Спасибо большое! Попробуем
28 фев 14, 13:53    [15646307]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить