Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как получить план выполнения процедуры? / 11 сообщений из 11, страница 1 из 1
06.05.2021, 11:43
    #40068725
qqq_2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить план выполнения процедуры?
Добрый день.

Есть следубщая проблема:

Процдура в 99.99% случаев выполняется за долю секунды.

Но в 00.01% она выполняется около минуты.


Натравил не неё профайлер + логгирую sysprocesses.


Подскажите пожалуйста, как можно получить реальный план выполнения этой процедуры в профайлере?
Важно, нужен только ее план, как не пытался включать различные галочки в Перфоманс - логгируется куча других планов (((

Или можно как-то во время выполнения ее план запросом достать?
...
Рейтинг: 0 / 0
06.05.2021, 11:46
    #40068727
qqq_2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить план выполнения процедуры?
Я думал сначала что то блоккировка от другого SPID.

Но когда отловил во время выполнения, поле blocked было=0


И сейчас вообще не понимаю почему она редко но метко тормозит :-((
...
Рейтинг: 0 / 0
06.05.2021, 12:29
    #40068736
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить план выполнения процедуры?
qqq_2,

можно попробовать отловить с помощью sp_HumanEvents , которая выдаст реальный план выполнения
Код: sql
1.
EXEC dbo.sp_HumanEvents @event_type = 'query', @query_duration_ms = 1000, @seconds_sample = 20, @database_name = 'DB', ...



указать доп фильтры, такие как хост, пользователь, приложение, объект и т.п.

тут видео от автора процы Erik Darling
...
Рейтинг: 0 / 0
06.05.2021, 14:24
    #40068765
Тяп-ляп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить план выполнения процедуры?
Найди на просторах процедуру sp_who3, посмотри, каким запросом она план получает.
Джобом раз в полминуты результаты этого запроса клади в таблицу.
Изучай плохой план, сохраненный в этой таблице.
...
Рейтинг: 0 / 0
06.05.2021, 20:46
    #40068814
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить план выполнения процедуры?
komrad
qqq_2,

можно попробовать отловить с помощью sp_HumanEvents , которая выдаст реальный план выполнения
Код: sql
1.
EXEC dbo.sp_HumanEvents @event_type = 'query', @query_duration_ms = 1000, @seconds_sample = 20, @database_name = 'DB', ...



указать доп фильтры, такие как хост, пользователь, приложение, объект и т.п.

тут видео от автора процы Erik Darling

Нет слов. Я даже до конца пролистать не смог.
Занафига?

У тредстартера ПРОЦЕДУРА.
Тормозит не ПРОЦЕДУРА целиком, а конкретный стейтмент внутри этой процедуры.
1. Установить оный.
2. Поразмыслить на тему "нафига он тормозит".
3. Тупо переписать этот стейтмент.
...
Рейтинг: 0 / 0
06.05.2021, 21:56
    #40068824
godsql
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить план выполнения процедуры?
qqq_2,

попробуй посмотреть в sys.dm_exec_query_plan
...
Рейтинг: 0 / 0
06.05.2021, 22:14
    #40068826
godsql
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить план выполнения процедуры?
а вообще, практически 100%, планы тут ни чего не дадут
...
Рейтинг: 0 / 0
07.05.2021, 11:53
    #40068884
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить план выполнения процедуры?
aleks222

Нет слов. Я даже до конца пролистать не смог.
Занафига?

У тредстартера ПРОЦЕДУРА.
Тормозит не ПРОЦЕДУРА целиком, а конкретный стейтмент внутри этой процедуры.
1. Установить оный.
2. Поразмыслить на тему "нафига он тормозит".
3. Тупо переписать этот стейтмент.


Поясняю: данная процедура автоматически создаст extended event сессию, обнаружит долгие запросы, соберет статистику по выполнениям и I/O, выделенной и использованной памяти, спиллы в tempdb, возьмет актуальные планы, , закроет сессию и выдаст результат на экран.

По-моему, очень удобно и юзер-френдли.

Таким образом и обнаружится проблемный "стейтмент" в процедуре.
...
Рейтинг: 0 / 0
07.05.2021, 13:13
    #40068913
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить план выполнения процедуры?
godsql
а вообще, практически 100%, планы тут ни чего не дадут

+1 проблема, скорее всего, не в плане при такой статистике.
...
Рейтинг: 0 / 0
17.05.2021, 12:32
    #40070765
DaniilSeryi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить план выполнения процедуры?
Любимый вопрос на всех собеседованиях: У нас процедура раньше работала 1 секунду, теперь - несколько минут. Почему?
Правильный ответ: В таблицу, с которой работает процедура, вставили новые данные / удалили существующие - статистика таблицы стала некорректной, план запроса к таблице из-за этого строится некорректно, надо обновить статистику.

Оч-чень похоже на случай ТС. Данные в табличку влили, статистику не обновили, потом запустили процедуру, которая из-за работы с некорректной статистикой получила неверный план выполнения, и только сильно позже обновили статистику.

Вариант 2: В процедуре не используется WITH RECOMPILE, как в первый раз построили план выполнения под какое-то часто используемое значение параметра процедуры, так этот план и гоняют со всеми значениями параметра. Включая и такие редко используемые значения параметра, для которых нужен абсолютно другой план выполнения.

Вариант три: админ сервера когда-то услышал, что надо чистить кэш планов выполнения, теперь раз в сутки / 6 часов / иной промежуток времени чистит кэш, а процедура тяжёлая - пока сервер план выполнения построит с нуля, времени пройдёт ого-го. Та же минута, ага.
...
Рейтинг: 0 / 0
19.05.2021, 04:07
    #40071202
Как получить план выполнения процедуры?
С вероятностью 99,9% тормоза происходят при определённой комбинации параметров из-за того, что план для этой комбинации неэффективен. Я такие проблемы решаю ведением логов работы процедуры в таблицу и потом анализом этого лога.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как получить план выполнения процедуры? / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]