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

Откуда: Москва
Сообщений: 84
Немного предыстории. Имеется 2005, а на нем джоба. В джобе - временная таблица, куда выполняется вставка из здорового запроса. Схема такая

declare @tt table (....)

insert into @tt
select .....
from (здесь много чего)
join
(
    (
     select top 1 with ties .... from .....
     join  .... 
     order by row_number() over (...)-- это выборка последнего значения
    ) where id in (1,2,3) -- а это выборка только определенного типа последнего значения
)...
join ... (здесь еще много чего)

Джоба отрабатывала за приемлемое время (около 2 мин) и всех это вполне устраивало.

Встал вопрос о переходе на 2008R. Перенесли базы, проверяем. А эта джоба отрабатывает аж 20 минут!

Стали искать. Запрос - секунда, а вот когда insert - все втыкается. Взяли вместо времянки вьюху из запроса (один в один)- джоба отрабатывает за пару секунд! Нехило. Заело.

Изменил код подзапроса. Выкинул нах row_number, сделал выборку последнего значения джойном с максимальным айдишником, джоба стала работать быстро.

Вот теперь сидим и чешем репу, что это за чертовщина такая? Запрос что так, что этак - время не жрет, а вот когда еще Insert и row_munber() - все втыкается.

Причем на 2008 все ровно на порядок тормознее, хотя железо чуть выше.
Нихруна не понимаю.

В чем причина таких тормозов на 2008?
Да и вообще какого дьявола вставка во временную таблицу с первым вариантом запроса приводит к тормозам?
25 ноя 11, 13:28    [11658404]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза, опять о них родимых  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
И планы сравнивали?
25 ноя 11, 13:32    [11658443]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза, опять о них родимых  [new]
novise
Member

Откуда: Москва
Сообщений: 84
tpg,
А як же.
Но больше интересует почему такие тормоза на 2008.
Запрос-то в любом варианте отрабатывает быстро.
А вот изменение подзапроса очень и очень для инсерта.
25 ноя 11, 13:39    [11658536]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза, опять о них родимых  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
novise
tpg,
А як же...
И чем отличаются?
А статистику обновляли?
25 ноя 11, 13:42    [11658565]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза, опять о них родимых  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
конфигурация серверов одинаковая?
а то
declare @tt table (....)

insert into @tt
возможно проблема в памяти
25 ноя 11, 13:44    [11658601]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза, опять о них родимых  [new]
novise
Member

Откуда: Москва
Сообщений: 84
HandKot
конфигурация серверов одинаковая?
возможно проблема в памяти

На 2008 - больше. Конфигурация кластер. 2005 - одиночка.
И дело не в статистике. Еще раз: оба варианта запроса отрабатывают в пределах пары секунд.
25 ноя 11, 13:48    [11658647]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза, опять о них родимых  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
novise
HandKot
конфигурация серверов одинаковая?
возможно проблема в памяти

На 2008 - больше. Конфигурация кластер. 2005 - одиночка.
И дело не в статистике. Еще раз: оба варианта запроса отрабатывают в пределах пары секунд.


все-таки, для теста, замените табличную переменную на временную
25 ноя 11, 13:55    [11658735]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза, опять о них родимых  [new]
novise
Member

Откуда: Москва
Сообщений: 84
HandKot
все-таки, для теста, замените табличную переменную на временную

Попробую. Но опосля. И, кстати, запрос возвращает всего 2000 записей.
А криминал во внешнем условии where подзапроса. Если его выкинуть - то вставка выполняется мгновенно, но условие необходимое.
Мистика да и только.
25 ноя 11, 14:25    [11659082]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза, опять о них родимых  [new]
Glory
Member

Откуда:
Сообщений: 104751
novise
На 2008 - больше. Конфигурация кластер. 2005 - одиночка.
И дело не в статистике. Еще раз: оба варианта запроса отрабатывают в пределах пары секунд.

И что вы мониторили, кроме времени выполнения ?
Блокировки ? Ожидания ? Очереди к диску ?
25 ноя 11, 14:45    [11659271]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза, опять о них родимых  [new]
novise
Member

Откуда: Москва
Сообщений: 84
Glory
И что вы мониторили, кроме времени выполнения ?
Блокировки ? Ожидания ? Очереди к диску ?

Дело в том, что 2008 вообще без нагрузки. Запущена была только джоба, так что она его имела в полное удовольствие...
25 ноя 11, 14:51    [11659338]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза, опять о них родимых  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
ето примерно как пальцем в небо
25 ноя 11, 14:55    [11659384]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза, опять о них родимых  [new]
Glory
Member

Откуда:
Сообщений: 104751
novise
Дело в том, что 2008 вообще без нагрузки. Запущена была только джоба, так что она его имела в полное удовольствие...

Причем тут нагрузка ?
25 ноя 11, 14:55    [11659390]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза, опять о них родимых  [new]
novise
Member

Откуда: Москва
Сообщений: 84
Glory,
На sql server работал только один процесс - джоба. Никаких других запросов не выполнялось. Вообще никаких.
После изменения джоба стала летать на обоих серверах.
Очевидно. что row_number() в подзапросе в нашем случае приводит к проблемам выполнения. Но детали не смотрели. Админы сказали, что грузит процессор на 100%.
25 ноя 11, 15:09    [11659544]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза, опять о них родимых  [new]
Glory
Member

Откуда:
Сообщений: 104751
novise
Glory,
На sql server работал только один процесс - джоба. Никаких других запросов не выполнялось. Вообще никаких.
После изменения джоба стала летать на обоих серверах.
Очевидно. что row_number() в подзапросе в нашем случае приводит к проблемам выполнения. Но детали не смотрели. Админы сказали, что грузит процессор на 100%.

Вы же уверяете, что план выполнения не меняется. И CPU/IO тоже.
Что же тогда меняется то ?
25 ноя 11, 15:11    [11659567]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза, опять о них родимых  [new]
novise
Member

Откуда: Москва
Сообщений: 84
Glory,
На серверах, грешен, для плохого подзапроса план не сравнивал. Понадеялся на полное копирование. Хотя, конечно, чем черт не шутит.
Хохма: на 2005 у меня нет прав на просмотр плана, так что и не дергался...
25 ноя 11, 15:16    [11659604]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза, опять о них родимых  [new]
ABC_1982
Member

Откуда: Москва
Сообщений: 418
novise
Glory,
На серверах, грешен, для плохого подзапроса план не сравнивал. Понадеялся на полное копирование. Хотя, конечно, чем черт не шутит.
Хохма: на 2005 у меня нет прав на просмотр плана, так что и не дергался...

Ну и зачем врать тогда?
Если хотите разобраться, то смотрите планы запроса, снимайте статистику нагрузки на подсистемы сервера.
25 ноя 11, 20:30    [11662037]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза, опять о них родимых  [new]
novise
Member

Откуда: Москва
Сообщений: 84
ABC_1982,
Солнышко!
А как без плана нашел бы тормоза? Запросто-то восьмиэтажный. План смотрел только на 2008. Любопытно. Если запрос (исходный) в чистом виде - то 70% в подзапросе, а если insert - то 90% на операцию вставки.
Такое видали? ("и не такое видали" (с))
Изменение подзапроса на 3 порядка уменьшило время работы.
Повторюсь: собственно запрос на 2008 в обоих вариантах отрабатывает за пару секунд.

А тормоза связаны с конструкцией:
select top 1 ...
from ...
order by row_number() over(partition by obj_id order by  obj_id, rec_id desc)
в подзапросе.
Ну да ладно. На неделе, будет время?, покручу эту хрень более детально. Ежели будет интересное, сообчу всенепременно.
26 ноя 11, 23:22    [11665121]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза, опять о них родимых  [new]
Vicont_rtf
Member

Откуда:
Сообщений: 64
Доброго времени суток, недавно сталкнулся с подобной проблемой, но как выяснилось неверно показывал статистику фактический план запроса, отсюда и select за пару сек, а insert 90%. Реально тормознутый запрос нашел только после того как проставил select getdate() после каждой инструкции, ну и номер по порядку.
5 дек 11, 12:43    [11706086]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза, опять о них родимых  [new]
Glory
Member

Откуда:
Сообщений: 104751
Vicont_rtf
Реально тормознутый запрос нашел только после того как проставил select getdate() после каждой инструкции, ну и номер по порядку.

А Профайлер было использовать не судьба ?
5 дек 11, 12:45    [11706099]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза, опять о них родимых  [new]
Vicont_rtf
Member

Откуда:
Сообщений: 64
это было в храмке, которая вызывалась из хранимки.
5 дек 11, 12:58    [11706198]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить