Как получить план запроса 1с в sql
Планом запроса называется последовательность логических и физических операторов, которые должны быть выполнены СУБД для того чтобы получить результат SQL-запроса. Получение плана запроса может потребоваться в различных ситуациях, а в первую очередь при задачах оптимизации запросов.
Я хочу описать три способа получить план запроса используя инструменты СУБД MS SQL Server, каждый из способов может оказаться предпочтительнее в той или иной ситуации.
Получение плана запроса с помощью Profiler’а (или Extended Events)
Получение плана запроса с помощью Profiler’а (или нового механизма — Extended Events) является, наверное, наиболее популярным способом и причина заключается в том, что с помощью Profiler’а можно перехватить информацию о любом запросе, исполняемом в данный момент экземпляром SQL Server’а. Типичным, с целью получения плана запроса, является приведенный ниже способ работы с Profiler’ом (в связке с 1С:Предприятие):
- Настроить Profiler (или Extended Events) и поставить его на паузу
- Если трассировка содержит данные, очистить окно трассировки
- С помощью отладчика в 1С:Предприятие остановиться перед выполнением необходимого запроса
- Снять Profiler с паузы
- Выполнить запрос
- Остановить Profiler
- Проанализировать полученную информацию
Profiler является инструментом для создания трассировок и управления ими. С помощью данного инструмента можно получать различную информацию о работе СУБД. В данном случае мы будем использовать его для получения информации о выполняемом запросе, в частности, для того чтобы получить его план выполнения.
Для того чтобы получить план запроса в Profiler следует добавить следующие события:
Событие | Описание |
---|---|
Showplan All | Выводит подробную информацию о предполагаемом плане запроса в текстовом виде |
Showplan Statistics Profile | Выводит подробную информацию о действительном плане запроса в текстовом виде |
Showplan XML | Выводит подробную информацию о предполагаемом плане запроса в XML формате (может быть представлен графически) |
Showplan XML Statistics Profile | Выводит подробную информацию о действительном плане запроса в XML формате (может быть представлен графически) |
Также можно добавить необходимые отборы: по имени/идентификатору базы данных, номеру соединения, длительности выполнения.
Более подробная информация о работе с профайлером приведена в статье «Работа с Profiler SQL Server. Примеры настройки трассировок».
Получение кэшированного плана запроса с помощью динамической функции
Перед выполнением запроса СУБД проверяет наличие актуального кэшированного плана запроса. Если такой план запроса существует, тогда СУБД использует его, а не компилирует план запроса заново. Это позволяет сократить время выполнения запроса и именно поэтому, после выполнения очистки процедурного кэша, запросы выполняются дольше (происходит компиляция плана запроса). Таким образом, если мы знаем текст искомого запроса, мы можем получить его план из кэша (если он есть в кэше). Для этого необходимо обратиться к следующим динамическим функциям:
Функция | Описание |
---|---|
dm_exec_query_stats | Возвращает суммарную статистику производительности для кэшированных планов запросов в SQL Server |
dm_exec_sql_text | Возвращает текст пакета SQL, который определен указанным параметром |
dm_exec_query_plan | Возвращает события инструкции Showplan в XML-формате для пакета, указанного в дескрипторе плана |
Для поиска плана запроса необходимо выполнить в SQL Server Management Studio нижеприведенный запрос (также доступен во вложении к статье), при этом изменив условия отбора:
Доброго времени суток, коллеги. Хочу рассказать, как можно посмотреть план запроса через механизм Extended Events. Я хочу ответить на вопрос - как разработчику через SQL Management Studio посмотреть, что запрос, который он сделал, работает оптимально. На Инфостарте есть несколько статей, которые посвящены трассировкам в этом механизме. Мне, когда я не понимал, как это правильно делать, не хватало простой пошаговой инструкции. Я напишу инструкцию, выполняя которую можно будет увидеть план запроса, который выполняется из базы данных.
Настроим 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".
Надеюсь, данная инструкция поможет разработчикам, которые хотели посмотреть план запроса, но не знали как.
Время выполнения отчетов – один из ключевых показателей успешности внедрения 1С. Учитывая, что все отчеты строятся на основе выполнения запросов к базе данных, длительность работы запросов – ключевой показатель. Далеко не всегда время работы устраивает пользователей со стороны заказчика, поэтому администраторам приходится оптимизировать проблемные участки. Чтобы их найти в коде, можно использовать такой инструмент, как SQL Profiler.
Что такое MS SQL Profiler и где его найти?
В 1С запросы пишут на встроенном языке, который очень похож на SQL. В процессе работы текст запроса конвертируется в стандартный SQL-запрос и выполняется на стороне СУБД. И иногда, чтобы понять, в чем проблема, разработчику 1С нужно смотреть именно на SQL-версию своего запроса. Многие разработчики используют для этого такой инструмент, как MS SQL Profiler.
С его помощью программист сможет оценить схему SQL-запроса и его длительность, и найти проблемные места. Также есть возможность отфильтровать нужные вам данные – по чрезмерной длительности выполнения, имени таблицы и другим критериям. Информацию можно представить не только в виде текста и таблиц, но и с помощью наглядной графики. Найти этот инструмент можно в MS SQL Server – как одну из многочисленных опций программного обеспечения по управлению базами данных.
Естественно, использовать эту возможность смогут только владельцы клиент-серверных баз. Если же у вас используется файловая, то в качестве замены можно посоветовать технологический журнал от 1С. Конечно, он не настолько удобен и вариативен, но при должных навыках и из него можно узнать всю нужную информацию. Для этого понадобится достаточная квалификация, знания и мощное оборудование, так как запуск технологического журнала потребует приличных ресурсов.
Чтобы открыть MS SQL Profiler и начать работу с базами данных, надо запустить MS SQL, в открывшемся окне, в меню «Сервис» найти нужное приложение и открыть его. По щелчку откроется еще одно окно с просьбой указать сервер, где находятся наши клиент-серверные базы данных. Вы можете подключаться к нескольким серверам и разбираться в структуре их запросов к SQL.
Рис.1 SQL Server Приложение Profiler
Рис.2 Соединение с сервером
В терминологии SQL-процесс записи и последующего просмотра событий называется «трассировкой». Именно поэтому после указания данных сервера БД и логина с паролем откроется окно со свойствами трассировки. Наиболее интересной и значимой для нас является закладка «Выбор событий», поскольку там настраивается, что мы хотим видеть в трассировке.
Как настроить MS SQL Profiler для 1С
Чтобы не перегружать сервер и не занимать лишнее пространство на диске, нужно грамотно отфильтровать необходимые события. Несмотря на текстовую подсказку, разъясняющую суть столбца и строки, для оптимального результата нужны определенные знания. Также можно воспользоваться опытом других людей, чем мы и воспользуемся, проставив галки напротив следующих событий:
- Showplan Statistics Profile – отвечает за отражение подробных сведений плана запросов в текстовом виде;
- Showplan XML Statistics Profile – отразит графическое представление выполнения запроса;
- PRC: Completed – будут отражаться тексты запросов, выполняющихся в виде процедур с параметрами;
- SQL: Batch Completed – трассировка запросов без параметров.
Рис.3 Свойства трассировки
- DatabaseName – воспользуемся в настройках механизмом «Похоже на» и занесем туда наименование нашей БД. После установки подобного фильтра в нашей трассировке будут отражены только запросы, обрабатываемые в конкретной базе. Возможен множественный выбор, чтобы отобрать 2, 3 и более баз;
Рис.4 DatabaseName
- DatabaseID – отбор по идентификатору конкретной базы. Узнать этот параметр можно, создав и выполнив запрос “SELECT db_id()” в SQL Server Management Studio. Выбрав в дереве конкретную базу, вы сможете узнать все ее параметры, в том числе и идентификатор;
Рис.5 DatabaseID
Зачастую в работе возникает ситуация, когда запрос в 1С по каким-то причинам работает медленно, но анализ текста запроса не говорит нам о каких-либо проблемах.
В таком случае приходится изучать эту проблему на более низком уровне. Для этого нам нужно посмотреть текcт SQL-запроса и план запроса. Для этого можно использовать SQL Profiler.
SQL Profiler – предназначение
SQL Profiler – это программа, входящая в MS SQL Server, которая предназначена для просмотра всех событий, которые происходят в SQL-сервере. Иначе говоря, она нужна для записи трассировки.
В каких случаях данный инструмент может быть полезен 1С программисту? Прежде всего, можно получить текст запроса на языке SQL и посмотреть его план. Это также можно сделать и в технологическом журнале (ТЖ), но план запроса в ТЖ получается не таким удобным и требует наличия некоторых навыков и умений. К тому же в профайлере можно посмотреть не только текстовый, но и графический план выполнения запроса, что является более удобным.
Также профайлер позволяет узнать:
- запросы длиннее определенного времени
- запросы к определенной таблице
- ожидания на блокировках
- таймауты
- взаимоблокировки и т. д.
Анализ запросов с помощью SQL Profiler
Зачастую Profiler применяется именно для анализа запросов. И при этом нужно анализировать не все исполняемые запросы, а то, как определенный запрос на языке 1С транслируется в SQL, и обращать внимание на его план выполнения.
В частности, это бывает необходимо, чтобы понять, почему запрос выполняется медленно. Или при построении большого и сложного запроса необходимо удостовериться, что запрос на языке SQL не содержит соединений с подзапросом.
Для отслеживания запроса в трассировке выполняем следующие шаги:
1. Запускаем SQL Profiler: Пуск — Все программы — Microsoft SQL Server 2008 R2 — Средства обеспечения производительности — SQLProfiler.
2. Создаем новую трассировку: Файл – Создать трассировку (Ctrl+N).
3. Указываем сервер СУБД, на котором находится наша база данных и нажимаем Соединить:
Нам ничто не мешает выполнять трассировку сервера СУБД, находящегося на любом другом компьютере.
4. В появившемся окне Свойства трассировки переключаемся на закладку Выбор событий:
5. Далее нужно указать события и их свойства, которые мы хотим видеть в трассировке.
Так как нам нужны запросы и планы запросов, то необходимо включить соответствующие события. Для показа полного списка свойств и событий включаем флаги Показать все события и Показать все столбцы. Теперь необходимо выбрать только события, приведенные на рисунке ниже, остальные же – требуется отключить:
Описание этих событий:
- ShowplanStatisticsProfile– текстовый план выполнения запроса
- ShowplanXMLStatisticsProfile– графический план выполнения запроса
- RPC:Completed– текст запроса, если он выполняется как процедура (если выполняется запрос 1С с параметрами)
- SQL:BatchCompleted– текст запроса, если он выполняется как обычный запрос (если выполнялся запрос 1С без параметров)
6. На этом этапе необходима настройка фильтра для выбранных событий. Если фильтр не установлен, то мы будем видеть запросы для всех БД, расположенных на данном сервере СУБД. По кнопке Фильтры столбцов устанавливаем фильтр по имени базы данных:
Теперь мы видим в трассировке только запросы к БД «TestBase_8_2».
Также можно поставить фильтр и по другим полям, наиболее интересные из них:
- Duration (длительность)
- TextData (обычно это текст запроса)
- RowCounts (количество строк, возвращаемых запросом)
Допустим, нам необходимо «отловить» все запросы к таблице «_InfoRg4312» длительностью более 3-х секунд в базе данных «TestBase_8_2». Для этого необходимо:
a) Установить фильтр по базе данных (см. выше)
b) Установить фильтр по длительности (устанавливается в миллисекундах):
c) Установить фильтр по тексту запроса:
Для задания фильтра по тексту запроса используем маску. В случае необходимости отслеживать запросы, которые обращаются к нескольким таблицам, создается несколько элементов в разделе «Похоже на». Наложенные условия фильтров работают совместно.
7. Теперь запускаем трассировку с помощью кнопки Запустить в окне Свойства трассировки и наблюдаем события, попадающие под установленные фильтры, отображение которых было настроено.
Кнопки командной панели служат для управления трассировкой:
- Ластик – очищает окно трассировки
- Пуск – запускает трассировку
- Пауза – ставит трассировку на паузу, при нажатии на Пуск трассировка возобновляется
- Стоп – останавливает трассировку
8. Окно трассировки состоит из двух частей. В верхней части находятся события и их свойства, в нижней – информация, зависящая от типа событий. Для нашего примера здесь будет отображаться либо текст запроса, либо его план.
9. Запустим на выполнение запрос в консоли запросов 1С и посмотрим, как он отразится в профайлере:
По поведению трассировки видно, что запросов в итоге получилось несколько, и только один из них нам интересен. Остальные запросы – служебные.
10. Свойства событий дают возможность оценить:
- сколько секунд выполнялся запрос (Duration)
- сколько было логических чтений (Reads)
- сколько строк запрос вернул в результате (RowCounts) и т.д.
В нашем случае запрос выполнялся 2 миллисекунды, сделал 4 логических чтения и вернул 1 строку.
11. Если взглянуть на одно событие выше, то можно увидеть план запроса в графическом виде:
Из плана видно, что поиск осуществляется по индексу по цене, этот план нельзя назвать идеальным, так как индекс не является покрывающим, поля код и наименование получаются с помощью KeyLookup, что отнимает 50% времени.
Используя контекстное меню, полученный графический план запроса возможно сохранить в отдельный файл с расширением *.SQLPlan и открыть его в профайлере на другом компьютере или с помощью программы SQL Sentry Plan Explorer, которая является более продвинутой.
12. Если подняться еще выше, то мы увидим тот же план запроса, но уже в текстовом виде. Именно этот план отображается в ТЖ, ЦУП и прочих средствах контроля производительности 1С.
13. Через меню Файл – Сохранить как можно сохранить всю трассировку в различные форматы:
- В формат самого профайлера, то есть с расширением *.trc
- В формат xml
- Сделать из трассировки шаблон (См. следующий пункт)
- Cохранить полученную трассировку в виде таблицы базы данных. Это весьма удобный способ, когда, к примеру, нужно найти самый медленный запрос в трассировке или отфильтровать запросы по какому-либо параметру.
Используем меню Файл – Сохранить как – Таблица трассировки – Выбираем сервер СУБД и подключаемся к нему.
Затем выбираем базу данных на указанном сервере, указываем имя таблицы, куда будет сохранена трассировка. Можно использовать существующую таблицу, или дать ей новое имя, и тогда эта таблица будет создана автоматически.
Теперь возможно строить запросы любой сложности к нашей таблице: к примеру, искать наиболее долго выполняющиеся запросы.
Также нужно помнить, что Duration сохраняется в таблицу в миллионных долях секунды, и при выводе результата нужно переводить значение в миллисекунды. Также в таблице присутствует столбец RowNumber, показывающий номер данной строки в трассировке.
14. При частом использовании профайлера для анализа запросов постоянная настройка нужных событий и фильтров будет постоянно отнимать у вас много времени.
В данном случае нам помогут шаблоны трассировок, где мы настраиваем нужные нам фильтры и порядок колонок, а далее просто используем уже имеющийся шаблон при создании новой трассировки.
Для создания шаблона используем меню Файл – Шаблоны – Новый шаблон:
На первой закладке указываем тип сервера, имя шаблона и при необходимости ставим флаг для использования данного шаблона по умолчанию.
На второй закладке делаем выбор нужных событий и осуществляем настройку фильтров (как было показано выше).
Дополнительно рекомендуется выполнить настройку порядка столбцов в трассировке, что экономит время при последующем анализе запросов. Удобным представляется следующий порядок:
При создании новой трассировки можем указать нужный шаблон, и тогда на второй закладке все фильтры и события заполнятся автоматически по созданному шаблону.
PDF-версия статьи для участников группы ВКонтакте
Если Вы еще не вступили в группу – сделайте это сейчас и в блоке ниже (на этой странице) появятся ссылка на скачивание материалов.
Статья в PDF-формате
Если Вы уже участник группы – нужно просто повторно авторизоваться в ВКонтакте, чтобы скрипт Вас узнал. В случае проблем решение стандартное: очистить кеш браузера или подписаться через другой браузер.
35 учебных часов, подготовка к 1С:Эксперт, правильная настройка серверной части, оптимизация кода, мониторинг загруженности оборудования и прочие взрослые вещи.
Комментарии / обсуждение (11):
Здравствуйте! Вы пишете: “По поведению трассировки видно, что запросов в итоге получилось несколько, и только один из них нам интересен. Остальные запросы – служебные.” А как узнать, какой из них наш основной запрос?
Татьяна, здравствуйте!
Наш запрос будет обращаться к таблице которая соответствует объекту метаданных, а так же это понятно по набору выбираемых полей и полям по которым идет условие.
Что бы узнать какая таблица СУБД какому объекту метаданных соответствует, можно использовать функцию ПолучитьСтруктуруХраненияБазыДанных.
Вот пример одной из многих обработок с помощью которых можно посмотреть структуру хранения.
Добрый день. Подскажите, пожалуйста, почему в Profiler отображается не название используемого индекса (_Reference7_ByFieldFld109), а его номер (_Reference7_9)?
В примерах: Index Seek(OBJECT:([demo].[dbo].[_Reference7].[_Reference7_ByFieldFld109] AS [T1])
У меня: Index Seek(OBJECT:([demo].[dbo].[_Reference7].[_Reference7_9] AS [T1])
И только в обработке “Просмотр метаданных” я по номеру 9 нахожу этот индекс в списке и понимаю, что на самом деле поиск шел по индексу _Reference7_ByFieldFld109?
Здравствуйте!
Начиная с одной из версий платформы, индексы в СУБД стали именоваться по другому принципу “ИмяТаблицы_ПорядковыйНомер”, ранее нумерация была связана с названием и типом полей из которых индекс состоит. Изменение в платформе произошло относительно недавно, с этим и связано такое отличие.
Андрей, правильно я понимаю, что порядковый номер индекса совпадает с порядком в обработке “Структура хранения метаданных” и начинается не с 0, а с 1?
Имя индекса отображается одинаково и в MS SQL и в обработке структура хранения метаданных и начинается с 1.
В данной теме я хочу поговорить об очень полезном инструменте — SQL Server Profiler.
Как описано на MSDN, приложение SQL Server Profiler — это графический пользовательский интерфейс для трассировки SQL, с помощью которого можно наблюдать за экземпляром компонента Database Engine. Приложение позволяет собирать и сохранять данные о каждом событии в файле или в таблице для последующего анализа. Данное приложение представляет исключительную важность в задачах анализа производительности исполняемых запросов, а также при анализе проблем параллельности работы в базе данных.
На текущий момент Microsoft продвигает другой аналогичный инструмент — Extended Events и рекомендует пользоваться им, тем не менее я считаю полезным уметь работать и с инструментом Profiler.
Настройка приложения
В профайлере, начиная с версии 2005, в настройках приложения присутствует флажок «Показывать значения в столбце «Продолжительность» в микросекундах» (Show values in Duration column in microseconds). Данный флажок управляет как отображением значения в соответствующей колонке, так и значением, устанавливаемым для отбора по данной колонке. На мой взгляд, при работе с Profiler удобнее использовать микросекунды, поэтому советую данный флажок установить. Настройка находится в меню Сервис (Tools) → Параметры (Options).
Общие параметры
Запуск трассировки в Profiler
Для того чтобы запустить новую трассировку в Profiler необходимо:
- Открыть приложение SQL Server Profiler
- Выбрать пункт основного меню «Файл» (File), в нем «Создать трассировку» (New Trace)
- В открывшемся диалоге подключиться к нужному экземпляру SQL Server
- В открывшемся окне настроить трассировку
- Запустить трассировку
Настройка трассировки
Из вышеприведенного списка действий, самым сложным (а по своей сути — единственным) является настройка трассировки. Она имеет множество вариантов, попробуем разобрать основные из них.
Вкладка общие
Первым пунктом предлагается задать имя трассировки, имя можно оставить по умолчанию, но если будет открыто несколько трассировок, удобно именовать их чем-то осознанным.
Следующим пунктом предлагается выбрать шаблон трассировки из списка. В данном списке приводятся некоторые предопределенные шаблоны трассировок. Помимо этого, шаблоны можно дополнить своими, пользовательскими шаблонами. Данная возможность облегчит вам жизнь, поскольку каждый раз настраивать с нуля — не самое приятное занятие.
Вывод данных трассировки может происходить:
- На экран в новом окне — вывод происходит на экран, при этом в дальнейшем трассировку можно будет сохранить как в файл, так и в таблицу в СУБД (даже если опции записи в файл и/или таблицу не были включены)
- Записывать в файл на диске (опционально) — дополнительно к выбранным опциям, данные будут записываться в файл на диске. Далее этот файл можно открыть через профайлер. Эта опция удобна для сохранения и/или для передачи трассировки.
- Записывать в таблицу базы данных (опционально) — дополнительно к выбранным опциям, данные будут записываться в таблицу базы данных. Далее, посредством возможностей предоставляемых СУБД, можно произвести анализ данных, например, найти самые длительные события или просуммировать общую длительность.
Последним пунктом настройки предлагается установить время остановки трассировки, если это требуется.
Перед продолжением настройки установим шаблон «Пустой» (Blank), имя трассировки может быть произвольным, все остальные флажки могут быть сняты.
Основные свойства трассировки
Вкладка выбора событий
Событие — это действие экземпляра SQL Server Database Engine. Для анализа проблем, возникающих при работе с 1С, существуют определенные наборы событий, с которыми необходимо уметь работать.
Выбор событий — это основная часть настройки трассировки, он предполагает работу с матрицей: «Событие» — «Свойство события». Таким образом, в этой матрице надо установить флажки по тем событиям и их свойствам, которые мы хотим трассировать.
Помимо матрицы событий и их свойств, на форме присутствуют флажки: «Показать все события» (Show all events) и «Показать все столбцы» (Show all columns). При установленном флажке в матрице раскрываются все события/столбцы, при снятом остаются только выбранные. Помимо этого, флажок «Показать все столбцы» влияет на отображение данных в «Фильтры столбцов» — отображаемый список соответствует отображаемым столбцам в матрице. При этом, даже если столбец скрыт (не выбран в матрице и снят флаг «Показать все столбцы»), но отбор на него был установлен — отбор сработает.
«Фильтры столбцов» (Column Filters) — открывает список столбцов по которым можно установить отборы. Если значение события при трассировке не подходит под значение отбора в столбце, данное событие не будет отражено в трассировке. Таким образом, можно установить отбор на информационную базу, по которой необходимо произвести трассировку.
«Упорядочить столбцы» (Organize Columns) — используется для изменения (организации) порядка следования выводимых колонок.
Выбор событий трассировки
События для получения плана выполнения запроса
Для того чтобы получить план запроса в Profiler следует добавить следующие события:
Событие | Описание |
---|---|
Showplan All | Выводит подробную информацию о предполагаемом плане запроса в текстовом виде |
Showplan Statistics Profile | Выводит подробную информацию о действительном плане запроса в текстовом виде |
Showplan XML | Выводит подробную информацию о предполагаемом плане запроса в XML формате (может быть представлен графически) |
Showplan XML Statistics Profile | Выводит подробную информацию о действительном плане запроса в XML формате (может быть представлен графически) |
Помимо вышеприведенных событий, для получения полной картины происходящего полезно добавить события:
Событие | Описание |
---|---|
RPC:Completed | Происходит при завершении удаленного вызова процедуры |
SQL:BatchCompleted | Возникает при завершении выполнения инструкции Transact-SQL |
Среди столбцов, выводимых в трассировке, рекомендуется включить: TextData, BinaryData, Reads, Writes, CPU, Duration, SPID.
События для получения плана выполнения запроса
Также полезно установить фильтры по длительности и базе данных. Как это сделать описано ниже в статье.
Другие способы получения плана запроса (без использования Profiler) описаны в статье «Методы получения плана запроса в СУБД MS SQL Server»
События для получения графа взаимоблокировки
Для получения графа взаимоблокировки достаточно добавить одноименное событие Locks: Deadlock graph.
Событие Deadlock graph возникает одновременно с классом событий Lock: Deadlock. Класс событий Deadlock graph предоставляет XML-описание взаимоблокировки.
Среди столбцов, выводимых в трассировке, рекомендуется включить: EventSequence, SPID, StartTime, TextData.
События для получения графа взаимоблокировки
События для получения информации об эскалации
Для получения информации об эскалации достаточно добавить событие Locks: Escalation.
Событие Escalation возникает при эскалации блокировки, т.е. когда блокировка более мелких фрагментов преобразуется в блокировку более крупных фрагментов.
Также можно ограничить набор выводимых колонок теми данными, которые требуются для анализа.
События для получения информации об эскалации
Установка фильтров столбцов
Установить фильтры можно нажав на кнопку «Фильтры столбцов».
Установка отборов по столбцам
Важно понимать, не все события содержат те или иные колонки. Если событие не содержит колонку по которой установлен фильтр, данное событие отфильтровано не будет.
Очень полезным фильтром является отбор по имени базы или ее идентификатору (если в экземпляре находится несколько баз, а трассировать необходимо какую-то определенную). Для установки фильтра по имени базы необходимо для колонки DatabaseName установить значение «Похоже на» или «Не похоже на». Стоит отметить: если установленному значению будут отвечать несколько баз, тогда события будут собираться по каждой из них. Второй вариант фильтрации событий по определенной базе — установка отбора по колонке DatabaseID. Узнать идентификатор базы данных можно выполнив запрос в SQL Server Management Studio:
Читайте также: