Инструкция по получению плана запроса через Extended Events

22.11.21

База данных - HighLoad оптимизация

Доброго времени суток, коллеги. Хочу рассказать, как можно посмотреть план запроса через механизм Extended Events. Я хочу ответить на вопрос - как разработчику через SQL Management Studio посмотреть, что запрос, который он сделал, работает оптимально. На Инфостарте есть несколько статей, которые посвящены трассировкам в этом механизме. Мне, когда я не понимал, как это правильно делать, не хватало простой пошаговой инструкции. Я напишу инструкцию, выполняя которую можно будет увидеть план запроса, который выполняется из базы данных.
 
 Инструкция по настройке Extended Events

 Настроим Extended Events.
1.  Запускаем SQL Management Studio.
2. Переходим в Management - Extended Events - Sessions (нажимаем правой кнопкой мыши) - New Session Wizard (Новая сессия волшебство) 

3. На первом окне (если оно есть). Переходим на следующий шаг.

4. На следующем шаге задаем имя сессии. В дальнейшем оно будет отображаться в списке сессий. Переходим далее.

5. На следующем шаге ничего не нажимаем. Шаблоны мы в данном случае не используем. Переходим далее.

6. Далее выбираем query_post_execution_plan_profile (если есть), либо query_post_execution_showplan. Переходим далее.

 
 7. На следующем шаге нам нужно задать дополнительные поля, которые мы будем выводить в результат трассировки. Нам понадобятся поля "database name" и "sql text", так как в дальнейшем мы будем настраивать фильтры. Переходим далее.
 8. Это шаг с фильтрами. Мы их настроим позже. Пока пропускаем. Переходим на следующий шаг. 

 9. На этом шаге можно настроить сохранение результата трассировки в файл. Нам это сейчас не нужно. Переходим далее.

10. На этом шаге можно посмотреть настройки, которые мы сделали на предыдущих пунктах. Нажимаем "Finish".

11. Закрываем окно с настройкой. 

Трассировка настроена. 
Для того чтобы смотреть трассировку нужно:
1. Нажать правой кнопкой мыши на появившуюся сессию. Нажать "Start Sessions".

2. Нажать правой кнопкой мыши на появившуюся сессию. Нажать "Watch Live Data".

Сейчас мы уже сможем отлавливать планы запросов. Но это будут все планы всех запросов, которые выполняет платформа. В этом хаосе тяжело будет найти необходимый запрос. 

 
 Настройка фильтра в Extended Events

 Настроим фильтры. 
В одном из предыдущих шагов мы пропустили шаг с фильтрами. Мы хотим отловить определенные запрос в определенной базе. Найдем имя базы и кусочек исполняемого запроса.   
1. Имя базы. Имя базы можно посмотреть через утилиту администрирования, в поле "База данных". 

2. Кусочек запроса. Для того, чтобы найти запрос, который мы выполняем, я предлагаю использовать наименования полей таблицы, из который мы берем данные (полагаю, подойдет для запросов из временных таблиц), либо имя самой таблицы. 
В данном случае я буду использовать имя таблицы. 
Чтобы получить имя таблиц и их полей, можно использовать функцию "ПолучитьСтруктуруХраненияБазыДанных()". Она возвращает таблицу значений с нужными нам полями. Или можно использовать одну из обработок написанных на её основе. 
Для примера, я буду использовать регистр сведений "Курсы валют". 


У нас есть данные для установки фильтра. 
Нажимаем правой кнопкой мыши наш extended events. Свойства. 

Переходим на вкладу Events - Нажимаем Configure 

В открывшемся окне нужно выделить наше событие (если событий несколько, нужно выделить все, иначе фильтры не будут работать корректно), затем выбрать колонку "Filter (Predicate)" и добавить новый фильтр. Нам нужно 2 фильтра. 
Должно получится вот так.

Нажимаем "ОК". Мы все настроили.

 
 Просмотр плана запроса

 Сделаем запрос к регистру сведений "Курсы валют", чтобы проверить, что запросы попадают в Extended event. 
Выполним такой запрос. 

В "Watch live data" увидим новую строку (Чтобы очистить данные, можно закрыть и открыть это окно). Чтобы увидеть план, нужно перейти на вкладку "Query Plan".

 

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

Extened Evets План запроса Запрос Management Studio

См. также

Оптимизация нагрузки на ЦП сервера СУБД используя типовые индексы

HighLoad оптимизация Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Анализ простого плана запроса. Оптимизация нагрузки на ЦП сервера СУБД используя типовые индексы.

13.03.2024    2996    spyke    27    

42

Быстродействие типовой 1С

HighLoad оптимизация Платформа 1С v8.3 Бесплатно (free)

Оказывается, в типовых конфигурациях 1С есть, что улучшить!

13.03.2024    5119    vasilev2015    19    

37

Анализируем SQL сервер глазами 1С-ника

HighLoad оптимизация Инструменты администратора БД Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Обработка для простого и удобного анализа настроек, нагрузки и проблем с SQL сервером с упором на использование оного для 1С. Анализ текущих зааросов на sql, ожиданий, конвертация запроса в 1с и рекомендации где может тормозить

1 стартмани

15.02.2024    7661    159    ZAOSTG    68    

96

Удаление строк из таблицы значений различными способами с замером производительности

HighLoad оптимизация Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Встал вопрос: как быстро удалить строки из ТЗ? Рассмотрел пять вариантов реализации этой задачи. Сравнил их друг с другом на разных объёмах данных с разным процентом удаляемых строк. Также сравнил с выгрузкой с отбором по структуре.

09.01.2024    5991    doom2good    48    

63

Опыт оптимизации 1С на PostgreSQL

HighLoad оптимизация Бесплатно (free)

При переводе типовой конфигурации 1C ERP/УТ/КА на PostgreSQL придется вложить ресурсы в доработку и оптимизацию запросов. Расскажем, на что обратить внимание при потерях производительности и какие инструменты/подходы помогут расследовать проблемы после перехода.

20.11.2023    8880    ivanov660    6    

76

ТОП проблем/задач у владельцев КОРП лицензий 1С на основе опыта РКЛ

HighLoad оптимизация Бесплатно (free)

Казалось бы, КОРП-системы должны быть устойчивы, быстры и надёжны. Но, работая в рамках РКЛ, мы видим немного другую картину. Об основных болевых точках КОРП-систем и подходах к их решению пойдет речь в статье.

15.11.2023    5109    a.doroshkevich    20    

72

Начните уже использовать хранилище запросов

HighLoad оптимизация Запросы

Очень немногие из тех, кто занимается поддержкой MS SQL, работают с хранилищем запросов. А ведь хранилище запросов – это очень удобный, мощный и, главное, бесплатный инструмент, позволяющий быстро найти и локализовать проблему производительности и потребления ресурсов запросами. В статье расскажем о том, как использовать хранилище запросов в MS SQL и какие плюсы и минусы у него есть.

11.10.2023    16197    skovpin_sa    14    

98
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. JohnyDeath 301 28.11.21 18:03 Сейчас в теме
Во многих консолях запроса (в том числе и в типовой) есть встроенный просмотрщик плана запроса
2. TyurinArt 91 01.06.22 14:38 Сейчас в теме
(0) Подскажите в каком событие (event) находится поле (filed) TextData? В текст запроса добавлю идентификатор и по нему буду фильтровать Expended Events.
версия: SQL Server Management Studio 15.0.18390.0
3. Andrei_Ivanov 160 01.06.22 15:50 Сейчас в теме
(2) Добрый день. Мне кажется, можно использовать фильтр по полю "sql_text" - это и есть текст запроса.
TextData - как я понимаю, используется в sql профайлер. Этого поля я в extended events не увидел (пару событий посмотрел).
Поле sql_text я нашел, в событиях "sql_batch_complited" и "rpc_complited", полагаю что это одно из полей по умолчанию и находится во многих событиях.
Оставьте свое сообщение