Оптимизация запроса SQL Server 2008
От: SergASh  
Дата: 08.06.10 09:28
Оценка:
Привет всем!

Прошу помощи с оптимизацией запроса. Есть ХП, она строит временную таблицу и заполняет ее в несколько проходов, потом из нее делается с десяток выборок. Все работало сносно, но в какой-то момент стали наблюдаться тормоза при определенных параметрах ХП, чуть ли не по две минуты думает. Обычно хватало пары секунд.

Вот план. От ХП откручено все, что идет после проблемного запроса.

Спасибо.
Re: Оптимизация запроса SQL Server 2008
От: FilosOFF Россия  
Дата: 08.06.10 09:58
Оценка:
Здравствуйте, SergASh, Вы писали:

SAS>Привет всем!


О сколько раз твердили миру!
Текст ХП, структуру используемых таблиц с индексами, план в текстовом виде....

Я конечно знаю что там надо сделать.... Запрос подправить.
... << RSDN@Home 1.2.0 alpha 4 rev. 1231>>
Re[2]: Оптимизация запроса SQL Server 2008
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 08.06.10 11:47
Оценка:
Здравствуйте, FilosOFF, Вы писали:

FOF>Здравствуйте, SergASh, Вы писали:


SAS>>Привет всем!


FOF>О сколько раз твердили миру!

FOF>Текст ХП, структуру используемых таблиц с индексами, план в текстовом виде....

FOF>Я конечно знаю что там надо сделать.... Запрос подправить.


А может и не править. Возможно кеширование планов так работает. Если код процедуры сильно императивный, то возможно именно в этом причина.
Re[3]: Оптимизация запроса SQL Server 2008
От: FilosOFF Россия  
Дата: 08.06.10 12:57
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, FilosOFF, Вы писали:


FOF>>Здравствуйте, SergASh, Вы писали:


SAS>>>Привет всем!


FOF>>О сколько раз твердили миру!

FOF>>Текст ХП, структуру используемых таблиц с индексами, план в текстовом виде....

FOF>>Я конечно знаю что там надо сделать.... Запрос подправить.


G>А может и не править. Возможно кеширование планов так работает. Если код процедуры сильно императивный, то возможно именно в этом причина.

Не, я только что кофе разлил, вот по пятну вижу, что проблема в третей строчке (+-5)...................
... << RSDN@Home 1.2.0 alpha 4 rev. 1231>>
Re[2]: Оптимизация запроса SQL Server 2008
От: SergASh  
Дата: 08.06.10 14:42
Оценка:
Здравствуйте, FilosOFF, Вы писали:

FOF>Я конечно знаю что там надо сделать.... Запрос подправить.


Разве план в текстовом виде не урезанный по сравнению с XML?

В плане текст запроса и так есть, разве что только не отформатированный.

Не хочется показывать гуглу все потроха, а то мы вроде как NDA подписывали . Если я выложу бэкап этой базы, вам будет достаточно?
Re[4]: Оптимизация запроса SQL Server 2008
От: DenisCh Россия  
Дата: 09.06.10 04:20
Оценка:
Здравствуйте, FilosOFF, Вы писали:

FOF>Не, я только что кофе разлил, вот по пятну вижу, что проблема в третей строчке (+-5)...................


Коллега, Вы ошиблись... Ошибка в 7 и 10й строках...
... << RSDN@Home 1.2.0 alpha rev. 741>>
Re: Оптимизация запроса SQL Server 2008
От: capgreen  
Дата: 09.06.10 06:37
Оценка: 4 (1)
Для начала советую изучить вьюшки sys.dm_db_missing_index_... на тему индексов, которых не хватает Вашей процедуре.
Re[5]: Оптимизация запроса SQL Server 2008
От: FilosOFF Россия  
Дата: 09.06.10 10:26
Оценка:
Здравствуйте, DenisCh, Вы писали:

DC>Здравствуйте, FilosOFF, Вы писали:


FOF>>Не, я только что кофе разлил, вот по пятну вижу, что проблема в третей строчке (+-5)...................


DC>Коллега, Вы ошиблись... Ошибка в 7 и 10й строках...

Ваше право коллега, только что посмотрел, это был дешевый нескафе. А он дает большую погрешность, о чем, к стыду своему, я забыл.
... << RSDN@Home 1.2.0 alpha 4 rev. 1231>>
Re[3]: Оптимизация запроса SQL Server 2008
От: FilosOFF Россия  
Дата: 09.06.10 13:09
Оценка:
Здравствуйте, SergASh, Вы писали:

SAS>Разве план в текстовом виде не урезанный по сравнению с XML?

План в текстовом виде ЧИТАЕМ, в отличии от того что Вы выложили.

SAS>В плане текст запроса и так есть, разве что только не отформатированный. ъ

Совсем не удобно читать и выдирать от туда запросы.

SAS>Не хочется показывать гуглу все потроха, а то мы вроде как NDA подписывали . Если я выложу бэкап этой базы, вам будет достаточно?

Да и не надо ниче показывать, достаточно один запрос, который тормозит и пару слов о том, какие индексы существуют.
... << RSDN@Home 1.2.0 alpha 4 rev. 1231>>
Re[4]: Оптимизация запроса SQL Server 2008
От: SergASh  
Дата: 09.06.10 13:38
Оценка:
Здравствуйте, FilosOFF, Вы писали:

FOF>Здравствуйте, SergASh, Вы писали:


SAS>>Разве план в текстовом виде не урезанный по сравнению с XML?

FOF>План в текстовом виде ЧИТАЕМ, в отличии от того что Вы выложили.
Хм, мне казалось нынче модно откывать план в Management Studio и смотреть на диаграмму.

FOF>Да и не надо ниче показывать, достаточно один запрос, который тормозит и пару слов о том, какие индексы существуют.

Вот скрипт, который поднимает базу. Вот запрос, из которого выдрано все кроме необходимого. Тормозит последний insert. Удалось выяснить, что виноваты CROSS APPLY'и, но как избавиться от них непонятно.
Re[4]: Оптимизация запроса SQL Server 2008
От: SergASh  
Дата: 09.06.10 14:28
Оценка: :)
Здравствуйте, FilosOFF, Вы писали:

FOF>Здравствуйте, SergASh, Вы писали:


SAS>>Разве план в текстовом виде не урезанный по сравнению с XML?

FOF>План в текстовом виде ЧИТАЕМ, в отличии от того что Вы выложили.

План в текстовом виде
Re[5]: Оптимизация запроса SQL Server 2008
От: FilosOFF Россия  
Дата: 10.06.10 07:36
Оценка:
Здравствуйте, SergASh, Вы писали:

SAS>Здравствуйте, FilosOFF, Вы писали:


FOF>>Здравствуйте, SergASh, Вы писали:


SAS>>>Разве план в текстовом виде не урезанный по сравнению с XML?

FOF>>План в текстовом виде ЧИТАЕМ, в отличии от того что Вы выложили.
SAS>Хм, мне казалось нынче модно откывать план в Management Studio и смотреть на диаграмму.
Нет, это не модно, это ублюжество с огромным количеством прокруток в котором хрен что увидишь.

FOF>>Да и не надо ниче показывать, достаточно один запрос, который тормозит и пару слов о том, какие индексы существуют.

SAS>Вот скрипт, который поднимает базу. Вот запрос, из которого выдрано все кроме необходимого. Тормозит последний insert. Удалось выяснить, что виноваты CROSS APPLY'и, но как избавиться от них непонятно.
Чето файло не открываецо.

Сделайте просто:
SET SHOWPLAN_TEXT ON
EXEC [Ваша проца]

И киньте сюда текст запроса и то что выдаст план.
... << RSDN@Home 1.2.0 alpha 4 rev. 1231>>
Re[6]: Оптимизация запроса SQL Server 2008
От: SergASh  
Дата: 10.06.10 10:12
Оценка:
Здравствуйте, FilosOFF, Вы писали:

FOF>Сделайте просто:

FOF>
FOF>SET SHOWPLAN_TEXT ON
FOF>EXEC [Ваша проца]
FOF>

FOF>И киньте сюда текст запроса и то что выдаст план.

Сделал
Re[7]: Оптимизация запроса SQL Server 2008
От: FilosOFF Россия  
Дата: 10.06.10 12:59
Оценка:
Здравствуйте, SergASh, Вы писали:

SAS>Здравствуйте, FilosOFF, Вы писали:


FOF>>Сделайте просто:

FOF>>
FOF>>SET SHOWPLAN_TEXT ON
FOF>>EXEC [Ваша проца]
FOF>>

FOF>>И киньте сюда текст запроса и то что выдаст план.

SAS>Сделал

Отлично!
Ваш план довольно не плох. :D :D

Теперь надо спускаться на уровень данных и обратить пристальное внимание на следующие штуки:
1. Индексы, есть некоторое кол-во сканирования индекса. Возможно имеет смысл добавить нужные индексы, либо принудительно указать использование нужных.
2. Смотреть на типы соединений (лупы, мерджи и т.п.) зависит от содержания таблиц.
3. Конструкции вроде
    JOIN Tab1 t1 
            JOIN Tab2 t2 ON t2.tid = t1.id ON t1.a = 5

Действительно ли нужен именно такой порядок соединения, а если да, то действительно ли оптимизатор соединяет в нужном порядке.
попытаться поставить
OPTION(FORCE ORDER)

4. Конструкции вроде
WHERE a.id IN (Select id from b)
заменить на джойны.
5. Конструкции
  JOIN Tab1 t ON t.id = a.aid
    JOIN Tab2 t2 ON t2.id = b.bid AND t.v = 5

Вызывают большое сомнение.

Какта так.
... << RSDN@Home 1.2.0 alpha 4 rev. 1231>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.