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

Откуда:
Сообщений: 1062
Добрый!

Есть процедура.
в процедуре курсор
в курсор подается список

каждая запись отрабатывает секунду
всего записей 400 000

Что делать?
8 июл 15, 16:19    [17868283]     Ответить | Цитировать Сообщить модератору
 Re: курсор и производительность  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
кириллk
Добрый!

Есть процедура.
в процедуре курсор
в курсор подается список

каждая запись отрабатывает секунду
всего записей 400 000

Что делать?
Ждать

SELECT 400000/3600./24 = 4.63 суток...
8 июл 15, 16:21    [17868300]     Ответить | Цитировать Сообщить модератору
 Re: курсор и производительность  [new]
_djХомяГ
Guest
ну или переписывать на запрос с более эффективной производительностью
8 июл 15, 16:38    [17868373]     Ответить | Цитировать Сообщить модератору
 Re: курсор и производительность  [new]
кириллk
Member

Откуда:
Сообщений: 1062
_djХомяГ
ну или переписывать на запрос с более эффективной производительностью


процедуру переписать нельзя.
я думал может можно как нить запараллелить?
8 июл 15, 16:40    [17868390]     Ответить | Цитировать Сообщить модератору
 Re: курсор и производительность  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
кириллk
_djХомяГ
ну или переписывать на запрос с более эффективной производительностью


процедуру переписать нельзя.
я думал может можно как нить запараллелить?
Вообще не понимаю, как можно расчитывать на полезный ответ,
задав вопрос так, как это сделали Вы...
8 июл 15, 16:43    [17868406]     Ответить | Цитировать Сообщить модератору
 Re: курсор и производительность  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
кириллk
процедуру переписать нельзя.
я думал может можно как нить запараллелить?

а псомтреть на тело курсора..что в нем просиходит целую секунду? Может там внутрях усе коряво
8 июл 15, 16:44    [17868411]     Ответить | Цитировать Сообщить модератору
 Re: курсор и производительность  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8834
кириллk
_djХомяГ
ну или переписывать на запрос с более эффективной производительностью


процедуру переписать нельзя.
я думал может можно как нить запараллелить?


Если бы можно было запараллелить - наверное бы не использовали курсор? Перепишите под сервис брокер, он запросы может в параллель обрабатывать, курсором будете сообщения в очередь отправлять, брокер подхватит и в параллель отработает.
Но лучше всего переписать запрос для групповой операции и избавиться от курсора.
8 июл 15, 17:53    [17868785]     Ответить | Цитировать Сообщить модератору
 Re: курсор и производительность  [new]
Oleksii Kovalov
Member

Откуда:
Сообщений: 100
если курсор, значит есть цикл
если цикл - значит внутри какая-то обработка
если обработка - то, вероятно, запросы
если запросы и медленно - то, возможно, кривые планы запросов
если кривые планы запросов - то, вероятно, нехватка индексов или сами запросы кривые
если процедуру переписывать нельзя - то остается смотреть на индексы и подбирать необходимые.
8 июл 15, 22:33    [17869734]     Ответить | Цитировать Сообщить модератору
 Re: курсор и производительность  [new]
o-o
Guest
+ "если..то.."
"Дорогая, ты не права." "Ах, я не права, значит, я вру. Если я вру, значит, я брешу. Если я брешу, значит, я — собака… Мама, он меня сукой обозвал!"

А элементарно кривые руки - - не?
Недавно триггер попался на глаза.
Тоже переписывать нельзя, нам ту базу ресторят и делают read only.
Мне вообще-то наплевать на их OLTP, надо было индексы глянуть на таблице
и заказать недостающий(для нас, не для них),
чтоб на исходном сервере сделали, а то что возьмешь с read only..
Скриптую таблицу со всем ее хозяйством, заскриптовались заодно и триггеры.
Вида курсор по deleted, перекладывающий удаленные записи по одной в историческую таблицу.


В создании индекса, кстати, отказали, "и без того все медленно"
8 июл 15, 23:40    [17869918]     Ответить | Цитировать Сообщить модератору
 Re: курсор и производительность  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8834
o-o,

Это не тот триггер, что историю через динамику делает?
9 июл 15, 00:39    [17869990]     Ответить | Цитировать Сообщить модератору
 Re: курсор и производительность  [new]
Oleksii Kovalov
Member

Откуда:
Сообщений: 100
Может и триггер на одной из таблиц, кто знает
но если процедуру нельзя менять, то с большой долей вероятности и триггер тоже нельзя менять.

зы не люблю триггера. вредные они. и неправильные в скуле. но это уже философия.
9 июл 15, 00:50    [17869995]     Ответить | Цитировать Сообщить модератору
 Re: курсор и производительность  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
кириллk
_djХомяГ
ну или переписывать на запрос с более эффективной производительностью


процедуру переписать нельзя.
я думал может можно как нить запараллелить?
Ну вызывайте тогда вашу процедуру в 10 потоках и передавайте 10-ую часть от общего набора. Правда не факт что будет намного быстрее.
9 июл 15, 02:23    [17870052]     Ответить | Цитировать Сообщить модератору
 Re: курсор и производительность  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
Mind
Правда не факт что будет намного быстрее.
Не будет быстрее. А вероятность блокировок аццки возрастет.

Другого выхода, кроме как улучшать алгоритм - нет.

зы: У меня когда то был код, считающий ФИФО. Был медленным. Переделал на курсоры. Стало летать.
9 июл 15, 09:46    [17870439]     Ответить | Цитировать Сообщить модератору
 Re: курсор и производительность  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8834
Дык писать запросы надо не интуитивно, а с анализом плана выполнения.
9 июл 15, 11:14    [17870887]     Ответить | Цитировать Сообщить модератору
 Re: курсор и производительность  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
LSV
зы: У меня когда то был код, считающий ФИФО. Был медленным. Переделал на курсоры. Стало летать.
А у нас так было с самого начала.
Просто прикинули количество повторных вычислений.
Есть задачи, для которых курсоры просто рождены.
Эта - из их числа. ИМХО, конечно же.

Только курсор надо написать правильно (возможно, что и не один).
9 июл 15, 11:33    [17871048]     Ответить | Цитировать Сообщить модератору
 Re: курсор и производительность  [new]
Jaffar
Member

Откуда:
Сообщений: 633
Ставлю на то что там в процедуре просто "говно" написано, кривыми руками.
Обычно пишется всякими копрокодерами, которые пытаются в силу своей лени и олдфажности процедурно работать со множествами.

Видел как-то процедуру, в которой вместо
select
from Table1
join Table 2 on ...
where
         .....


было 2 курсора
в первом бежали по 1 таблице, закидывали все в переменные и потом проверяли соотв. ли значения в переменных условию where,
и если да - то бежали по 2 таблице и делали тоже самое и если совпадало - то делаили вставку переменных в табличку.

Жалко что я эту процедуру переписал и этот говнокод не сохранился для истории.

Еще бесит, особенно в Oracle, когда то что можно написать на SQL пишется на PL, когда видишь портянки километровые из 100500 if`ов, каких то циклов.... каких-то переменных 200 штук.

Долбаные олдфаги....
Откуда вы все беретесь ...
9 июл 15, 14:15    [17872212]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить