Настроим 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".
Сейчас мы уже сможем отлавливать планы запросов. Но это будут все планы всех запросов, которые выполняет платформа. В этом хаосе тяжело будет найти необходимый запрос.
Настроим фильтры.
В одном из предыдущих шагов мы пропустили шаг с фильтрами. Мы хотим отловить определенные запрос в определенной базе. Найдем имя базы и кусочек исполняемого запроса.
1. Имя базы. Имя базы можно посмотреть через утилиту администрирования, в поле "База данных".
2. Кусочек запроса. Для того, чтобы найти запрос, который мы выполняем, я предлагаю использовать наименования полей таблицы, из который мы берем данные (полагаю, подойдет для запросов из временных таблиц), либо имя самой таблицы.
В данном случае я буду использовать имя таблицы.
Чтобы получить имя таблиц и их полей, можно использовать функцию "ПолучитьСтруктуруХраненияБазыДанных()". Она возвращает таблицу значений с нужными нам полями. Или можно использовать одну из обработок написанных на её основе.
Для примера, я буду использовать регистр сведений "Курсы валют".
У нас есть данные для установки фильтра.
Нажимаем правой кнопкой мыши наш extended events. Свойства.
Переходим на вкладу Events - Нажимаем Configure
В открывшемся окне нужно выделить наше событие (если событий несколько, нужно выделить все, иначе фильтры не будут работать корректно), затем выбрать колонку "Filter (Predicate)" и добавить новый фильтр. Нам нужно 2 фильтра.
Должно получится вот так.
Нажимаем "ОК". Мы все настроили.
Сделаем запрос к регистру сведений "Курсы валют", чтобы проверить, что запросы попадают в Extended event.
Выполним такой запрос.
В "Watch live data" увидим новую строку (Чтобы очистить данные, можно закрыть и открыть это окно). Чтобы увидеть план, нужно перейти на вкладку "Query Plan".
Надеюсь, данная инструкция поможет разработчикам, которые хотели посмотреть план запроса, но не знали как.