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

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

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

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


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


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

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

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


И сейчас вообще не понимаю почему она редко но метко тормозит :-((
...
Рейтинг: 0 / 0
Как получить план выполнения процедуры?
    #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
Как получить план выполнения процедуры?
    #40068765
Тяп-ляп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Найди на просторах процедуру sp_who3, посмотри, каким запросом она план получает.
Джобом раз в полминуты результаты этого запроса клади в таблицу.
Изучай плохой план, сохраненный в этой таблице.
...
Рейтинг: 0 / 0
Как получить план выполнения процедуры?
    #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
Как получить план выполнения процедуры?
    #40068824
godsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qqq_2,

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

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

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


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

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

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

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

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

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

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


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