Инструкция по получению плана запроса через 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    3735    spyke    28    

47

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

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

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

13.03.2024    5733    vasilev2015    19    

38

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

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

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

1 стартмани

15.02.2024    8766    173    ZAOSTG    74    

104

Переход на Clickhouse для анализа метрик

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

Принимать, хранить и анализировать показания счетчиков (метрики) в базе 1С? Почему бы нет? Но это решение быстро привело к проблемам с производительностью при попытках построить какую-то более-менее сложную аналитику. Переход на PostgresSQL только временно решил проблему, т.к. количество записей уже исчислялось десятками миллионов и что-то сложное вычислить на таких объемах за разумное время становилось все сложнее. Кое-что уже практически невозможно. А что будет с производительностью через пару лет - представить страшно. Надо что-то предпринимать! В этой статье поделюсь своим первым опытом применения СУБД Clickhouse от Яндекс. Как работает, что может, как на нее планирую (если планирую) переходить, сравнение скорости работы, оценка производительности через пару лет, пример работы из 1С. Все это приправлено текстами запросов, кодом, алгоритмами выполненных действий и преподнесено вам для ознакомления в этой статье.

1 стартмани

24.01.2024    3668    glassman    17    

38

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

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

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

09.01.2024    7128    doom2good    49    

65

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

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

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

20.11.2023    9833    ivanov660    6    

76

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

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

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

15.11.2023    5559    a.doroshkevich    20    

72

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

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

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

11.10.2023    16884    skovpin_sa    14    

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