что такое профайлер sql
Приложение SQL Profiler
Служебная программа profiler не предназначена для написания скриптов трассировки. Дополнительные сведения см. в разделе Start SQL Server Profiler.
Синтаксис
Аргументы
По возможности используйте аутентификацию Windows..
/E
Задает подключение с использованием проверки подлинности Windows с учетными данными текущего пользователя.
/D database
Указывает имя базы данных, которая будет использоваться с соединением. Если база данных не указывается, этот аргумент выберет базу данных по умолчанию для указанного пользователя.
/B « trace_table_name «
Указывает таблицу трассировки для загрузки при запуске профайлера. Необходимо задать базу данных, пользователя или схему, а также таблицу.
/T» template_name «
Указывает шаблон, загружаемый для настройки трассировки. Имя шаблона должно быть заключено в кавычки. Имя шаблона должно находиться либо в системном каталоге шаблонов, либо в пользовательском каталоге шаблонов. В случае существования двух шаблонов с одним именем в обоих каталогах будет загружен шаблон, находящийся в системном каталоге. Если шаблон с указанным именем не существует, то будет загружен стандартный шаблон. Примечание. Расширение файла для шаблона (TDF) в аргументе template_name указывать не нужно. Пример:
/F» filename «
Указывает путь и имя файла трассировки, загружаемого при запуске профайлера. Полный путь и имя файла должны быть заключены в кавычки. Этот параметр нельзя использовать совместно с параметром /O.
/O « filename «
Указывает путь и имя файла, в который должны быть записаны результаты трассировки. Полный путь и имя файла должны быть заключены в кавычки. Этот параметр нельзя использовать совместно с параметром /F.
/L locale_ID
Недоступно.
/M « MM-DD-YY hh:mm:ss «
Задает дату и время остановки трассировки. Время остановки должно быть заключено в кавычки. Задайте время остановки согласно параметрам в следующей таблице.
Параметр | Определение |
---|---|
ММ | Месяц (2 разряда) |
DD | День (2 разряда) |
ГГ | Год (2 разряда) |
hh | Час (2 разряда), в 24-часовом формате |
ММ | Минуты (2 разряда) |
сс | Секунды (2 разряда) |
Формат «ММ-ДД-ГГ чч:мм:сс» можно использовать только в том случае, если включен параметр Использовать региональные настройки при показе значений даты и времени в приложении Приложение SQL Server Profiler. Если этот параметр не включен, следует использовать формат даты и времени «ГГГГ-ММ-ДД чч:мм:сс».
/R
Включает операцию переключения на файл продолжения трассировки.
/Z file_size
Определяет размер файла трассировки в мегабайтах (МБ). Размер по умолчанию составляет 5 МБ. Если включена операция переключения, все файлы продолжения будут ограничены значением, указанным в этом аргументе.
Remarks
Выполнение приложения SQL Server Profiler
Приложение SQL Server Profiler можно запустить несколькими способами для получения данных трассировки в разных сценариях. Можно запустить приложение Приложение SQL Server Profiler из меню Пуск Windows 10, из меню Сервис в помощнике по настройке компонента Компонент Database Engine и из нескольких расположений в среде SQL Server Management Studio.
При первом запуске Приложение SQL Server Profiler и выборе в меню Файл пункта Создать трассировку приложение отображает диалоговое окно Соединение с сервером, где можно указать экземпляр SQL Server для подключения.
Запуск приложения SQL Server Profiler из меню «Пуск» Windows 10
Запуск SQL Server Profiler в помощнике по настройке ядра СУБД
Запуск SQL Server Profiler в SQL Server Management Studio
Вы можете открыть Приложение SQL Server Profiler из нескольких расположений в SQL Server Management Studio. При запуске приложения Приложение SQL Server Profiler загружается контекст подключения, шаблон трассировки и выполняется фильтрация контекста точки запуска. SQL Server Management Studio запускает каждый сеанс SQL Server Profiler в отдельном экземпляре, выполнение которого продолжается после завершения работы SQL Server Management Studio.
Запуск приложения SQL Server Profiler из меню «Инструменты»
Запуск приложения SQL Server Profiler из редактора запросов
В редакторе запросов щелкните правой кнопкой мыши, а затем выберите пункт Трассировка запроса в приложении SQL Server Profiler.
Контекстом соединения является редактор соединения, шаблон трассировки — TSQL_SP, а применяемый фильтр SPID = окно запроса SPID.
Запуск приложения SQL Server Profiler из монитора активности
В мониторе активности щелкните панель Процессы, щелкните правой кнопкой процесс, который хотите профилировать, а затем выберите пункт Трассировка процесса в приложении SQL Server Profiler.
Когда выбран процесс, контекстом соединения является соединение обозревателя объектов при открытии монитора активности. Шаблон трассировки — это шаблон по умолчанию в зависимости от типа сервера, а идентификатор SPID равен идентификатору SPID для выбранного процесса.
SQL Server Profiler. В картинках, для самых маленьких
Для тех, у кого нет доступа к SQL Server Profiler (SQL 2012) или кому просто некогда. Материал составлен с оглядкой на статью Андрея Бурмистрова.
1. Настройка «Max degree of parallelism»
Если при анализе планов запроса у вас встречаются характерные операторы «Параллелизм»,
Нужно сделать настройку в SQL Management Studio. Максимальная степень параллелизма должна быть 1. При изменении сервер перезапускать не нужно.
2. Появляются записи Trace Skipped Records
Если при трассировке появляются записи Trace Skipped Records, которые нужно просмотреть, необходимо при создании трассировки указать «Сохранить в файл», имя файла на сервере СУБД, установить максимальный размер файла, «Сервер обрабатывает данные трассировки».
Ниже пример трассировки с Trace Skipped Records и то же из файла, где записи приведены полностью. (Выше записи Duration = 7565).
3.1. Программа в режиме автоматических блокировок. Выполним код
3.2. Тот же самый код (Набор записей.Прочитать) в режиме управляемых блокировок, используется совместимость с 8.2 делает запрос в транзакции, уровень изоляции Read Commited
3.3. Тот же самый код (Набор записей.Прочитать) в режиме управляемых блокировок, НЕ используется совместимость с 8.2
3.5. Автоматический режим блокировок. Чтение запросом в транзакции.
Режим
блокировки
в транзакции
Repeatable Read
или Serializable
СУБД POSTGRES конструкция «ДЛЯ ИЗМЕНЕНИЯ» (автоматический режим) препятствует чтению заблокированных данных любыми запросами в транзакции. Лично проверил.
5. Архитектура хранения констант
База ut_vasilev3 в режиме совместимости 8.2.13, обращение идет к единственной таблице dbo._Consts
Выполним тот же запрос, база ut_vasilev в режиме совместимости 8.2.16, обращение идет к разным таблицам.
Переход к такой архитектуре в версии 8.2.14 и выше расширил возможности параллельной работы с константами.
6. Ограничения прав на уровне записей (RLS)
Вместе с шаблоном ограничений механизм RLS добавляет в текст запроса строку SDBL_DUMMY. На рисунке фрагмент такого запроса, фильтр по тексту запроса в свойствах трассировки.
Посмотрим как-бы безобидный код ПрочитатьОдинРеквизит = ДокументСсылка.Дата;
Начинается транзакция (1), читается версия объекта (2), читаются реквизиты объекта (3), читается первая табличная часть объекта(4). Текст запроса показывает чтение всех реквизитов документа. Их слишком много, использовал пропуск.
Скорее всего версия объекта используется при повторном обращении к реквизитам объекта: оно происходит быстрее. Программа 1С изменяет номер версии при каждом изменении данных, поэтому если версии совпадают, то 1С считает данные совпадающими. Данные кэшируются на 20 секунд.
Чтобы читать данные быстрее и аккуратнее, используйте функции: ЗначениеРеквизитаОбъектов, ЗначенияРеквизитовОбъектов, ЗначениеРеквизитаОбъекта, ЗначенияРеквизитовОбъекта. Кстати, с помощью этих функций можно выполнять запросы с соединениями через точку, например ИНН контрагента из накладной:
СтруктураЗапроса = Новый Структура(«ИННКонтрагента»,»Контрагент.ИНН»);
ЗначенияРеквизитов = ЗначенияРеквизитовОбъекта(РеализацияТоваровУслуг, СтруктураЗапроса);
8. Избранные события.
Составил таблицу по документации. Столбцы, помогающие выделить событие среди процессов других приложений или пользователей не указывал: предполагал монопольное использование Profiler. Ориентировался на вопросы экзамена. Посоветуйте, что еще добавить.
получение блокировки ресурса было отменено
возникает при укрупнении уровня блокировки
блокировка ресурса была снята
запрос на захват некоторого ресурса, например страницы, превысил время ожидания, так как данный ресурс был захвачен в блокирующем режиме другой транзакцией
План до выполнения запроса. Используют например, если запрос не выполняется из-за ошибки. Любопытно, что стоимость операторов (cost) в актуальном плане может не пересчитываться.
Showplan All for Query Compile
Showplan Statistics Profile
План в текстовом формате. Используется при анализе.
Showplan XML Statistics Profile
В формате XML. Используется при анализе.
например, завершение запроса
Количество занятого событием времени. В микросекундах, начиная с SQL Server 2008 R2. В миллисекундах в более ранних версиях.
Число операций чтения страниц
Выполнение команды. Например, начата/завершена транзакция.
Количество занятого событием времени. В микросекундах, начиная с SQL Server 2008 R2. В миллисекундах в более ранних версиях.
Инфраструктура профилирования запросов
Компонент SQL Server Database Engine предоставляет возможность доступа к сведениям среды выполнения о планах выполнения запросов. При возникновении проблемы с производительностью одним из самых важных действий является получение сведений о том, какая рабочая нагрузка выполняется в данный момент и каким образом происходит управление ресурсами. Для осуществления этого важно иметь доступ к действительному плану выполнения.
Несмотря на то, что для доступности действительного плана запроса необходимо дождаться завершения выполнения запроса, динамическая статистика запросов может анализировать процесс выполнения запроса в режиме реального времени, по мере передачи управления от одного оператора плана запроса другому. Динамический план запроса отображает общий ход выполнения запроса и текущую статистику выполнения на уровне оператора, например число полученных строк, затраченное время, ход выполнения оператора и т. д. Так как эти данные доступны в режиме реального времени и, чтобы их увидеть, не нужно дожидаться завершения запроса, такая статистика чрезвычайно полезна для отладки проблем с производительностью запросов, таких как долгое или «бесконечное» выполнение запросов.
Стандартная инфраструктура профилирования статистики выполнения запросов
Инфраструктуру профилей статистики выполнения запросов, или стандартное профилирование, необходимо включить для сбора сведений о планах выполнения, а именно числе строк, использовании ЦП и операциях ввода-вывода. Следующие методы сбора сведений о плане выполнения для целевого сеанса используют стандартную инфраструктуру профилирования:
Режим Включить динамическую статистику запросов в SQL Server Management Studio использует стандартную инфраструктуру профилирования.
В более поздних версиях SQL Server, если включена упрощенная инфраструктура профилирования, именно она используется для динамической статистики запросов вместо обычного профилирования при просмотре через Монитор активности или прямые запросы sys.dm_exec_query_profiles динамического административного представления.
Следующие методы сбора сведений о плане выполнения глобально для всех сеансов используют стандартную инфраструктуру профилирования:
При выполнении сеанса расширенного события, использующего событие query_post_execution_showplan, также заполняется динамическое административное представление sys.dm_exec_query_profiles, которое включает динамическую статистику запросов для всех сеансов при помощи монитора активности или прямого запроса динамического административного представления. Дополнительные сведения см. в статье Live Query Statistics.
Упрощенная инфраструктура профилирования статистики выполнения запросов
Начиная с SQL Server 2014 (12.x) SP2 и SQL Server 2016 (13.x); была введена новая упрощенная инфраструктура профилирования статистики выполнения запросов, или упрощенное профилирование.
Хранимые процедуры, скомпилированные в собственном коде, не поддерживаются в упрощенном профилировании.
Упрощенная инфраструктура профилирования статистики выполнения запросов версии 1
Область применения: SQL Server (с SQL Server 2014 (12.x) с пакетом обновления 2 по SQL Server 2016 (13.x);).
Начиная с SQL Server 2014 (12.x) SP2 и SQL Server 2016 (13.x); потребление ресурсов при сборе сведений о планах выполнения было снижено путем введения упрощенного профилирования. В отличие от стандартного, упрощенное профилирование не собирает сведения о ЦП среды выполнения. Однако упрощенное профилирование по-прежнему собирает сведения о количестве строк и сведения об использовании операций ввода-вывода.
Также было добавлено новое расширенное событие query_thread_profile, использующее упрощенное профилирование. Это расширенное событие предоставляет статистику выполнения по операторам, позволяя получить больше сведений о производительности каждого узла и потока. Ниже приведен пример сеанса, использующего это расширенное событие.
При выполнении сеанса расширенного события, использующего событие query_thread_profile, также заполняется динамическое административное представление sys.dm_exec_query_profiles с помощью упрощенного профилирования, которое включает динамическую статистику запросов для всех сеансов при помощи монитора активности или прямого запроса динамического административного представления.
Упрощенная инфраструктура профилирования статистики выполнения запросов версии 2
Область применения: SQL Server (с SQL Server 2016 (13.x); с пакетом обновления 1 по SQL Server 2017 (14.x);)
SQL Server 2016 (13.x); SP1 включает переработанную версию упрощенного профилирования с минимальным потреблением ресурсов. Упрощенное профилирование можно также включить глобально с помощью флага трассировки 7412 в версиях, указанных выше в поле Применимо к. Новая функция динамического управления sys.dm_exec_query_statistics_xml введена для возвращения плана выполнения запроса для активных запросов.
Начиная с SQL Server 2016 (13.x); SP2 CU3 и SQL Server 2017 (14.x); CU11, если упрощенное профилирование не включено глобально, можно использовать указание запроса USE HINT с новым аргументом QUERY_PLAN_PROFILE для включения упрощенного профилирования на уровне запроса для любого сеанса. После завершения запроса, содержащего это новое указание, также выводится новое расширенное событие query_plan_profile _, предоставляющее действительный план выполнения в формате XML, аналогично расширенному событию _query_post_execution_showplan.
Расширенное событие query_plan_profile также использует упрощенное профилирование, даже если указание запроса отсутствует.
Пример сеанса с расширенным событием query_plan_profile можно настроить, как показано ниже:
Упрощенная инфраструктура профилирования статистики выполнения запросов версии 3
Применимо к: SQL Server (начиная с SQL Server 2019 (15.x)) и База данных SQL Azure
Новое расширенное событие query_post_execution_plan_profile служит для сбора эквивалента действительного плана выполнения на основе упрощенного, а не стандартного профилирования, как в случае с событием query_post_execution_showplan. SQL Server 2017 (14.x); также предлагает это событие, начиная с CU14. Пример сеанса с расширенным событием query_post_execution_plan_profile можно настроить, как показано ниже.
Пример 1. Сеанс расширенных событий на основе стандартного профилирования
Пример 2. Сеанс расширенных событий на основе упрощенного профилирования
Руководство по использованию инфраструктуры профилирования запросов
В приведенной ниже таблице перечислены действия по включению стандартного или упрощенного профилирования глобально (на уровне сервера) или в одном сеансе. В ней также приведены сведения о минимальных версиях, поддерживающих это действие.
Remarks
Из-за возможных случайных нарушений прав доступа во время выполнения мониторинга хранимой процедуры, которая ссылается на sys.dm_exec_query_statistics_xml, необходимо установить исправление 4078596 КБ на SQL Server 2016 (13.x); и SQL Server 2017 (14.x);.
В SQL Server 2017 (14.x); упрощенное профилирование по умолчанию отключено, но оно включается при запуске трассировки XEvent на основе query_post_execution_plan_profile и снова отключается при остановке трассировки. Поэтому если трассировка XEvent на основе query_post_execution_plan_profile часто запускается и останавливается на экземпляре SQL Server 2017 (14.x);, настоятельно рекомендуется включить упрощенное профилирование на глобальном уровне, установив флаг трассировки 7412, чтобы избежать повторяющихся издержек на включение и отключение профилирования.
Анализ запросов с помощью SQL Profiler
В своей работе мы довольно часто сталкиваемся с ситуацией, когда определенный запрос работает медленно, причем по тексту запроса невидно никаких очевидных проблем. Обычно в этом случае необходимо расследовать проблему на более глубоком уровне. Как правило, возникает необходимость посмотреть текст SQLзапроса и его план, и вот в этом нам как раз помогает SQLProfiler.
Что такое SQL Profiler и зачем оно вообще нужно
SQLProfilerэто программа поставляемая вместе с MS SQL Server и предназначена она для и просмотра всех событий, которые происходят в SQL сервер или говоря другими словами для записи трассировки. Зачем SQLProfiler может понадобиться программисту 1С? Хотя бы для того, что бы получить текст запроса на языке SQL и посмотреть его план. Конечно, это можно сделать и с помощью технологического журнала, но это требует некоторых навыков, да и план в ТЖ получается не такой красивый и удобочитаемый. В профайлере можно посмотреть не только текстовый, но и графический план выполнения запроса, что на мой взгляд, гораздо удобнее. Так же с помощью профайлера можно определить: запросы длиннее определенного времени запросы к определенной таблице ожидания на блокировках таймауты взаимоблокировки и многое другое…
Анализ запросов с помощью SQL Profiler
Наиболее часто профайлер используется именно для анализа запросов. Как правило, нам не нужно отслеживать все запросы, зачастую необходимо увидеть, как определенный запрос на языке 1С транслируется в SQL, и посмотреть план его выполнения. Например, это может потребоваться, что бы определить, почему запрос выполняется медленно или мы написали большой запрос и хотим убедиться, что текст запроса на языке SQL не содержит соединений с подзапросом. Что бы отловить запрос в трассировке делаем следующее:
Естественно, ничего не мешает выполнять трассировку сервера СУБД, который находится на другом компьютере. 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С. Для его анализа рекомендую использовать продвинутый текстовый редактор с подсветкой, например Notepad++.
13. Использую меню «Файл-Сохранить как», всю трассировку можно сохранить в различные форматы:
a) В формат самого профайлера, т.е. с расширением *.trc
b) В формат xml
c) Можно сделать из трассировки шаблон. См. следующий пункт.
d) Можно сохранить трассировку в виде таблицы базы данных. Удобный способ, если нам нужно найти например самый медленный запрос во всей трассировке либо отобрать запросы по какому-либо параметру. Файл – Сохранить как – Таблица трассировки – Выбираем сервер СУБД и подключаемся к нему Далее нужно выбрать базу данных на указанном сервере и указать имя таблицы, куда будет сохранена трассировка. Можно выбрать уже существующую таблицу, либо написать новое имя и тогда таблица будет создана автоматически в выбранной базе данных.
Далее вы можете строить запросы любой сложности к этой таблице, например искать наиболее долгие запросы.
При этом нужно учитывать, что Duration сохраняется в таблицу в миллионных долях секунды и при выводе результата, желательно переводить значение в миллисекунды. Так же в таблицу добавляется столбец RowNumber, который показывает номер данной строки в трассировке.
14. Если вам требуется часто использовать профайлер для анализа запросов, то настройка необходимых фильтров и событий быстро надоест и к тому же будет отнимать много времени. На помощь приходят шаблоны трассировок, где мы указываем нужные нам фильтры и порядок колонок, а далее просто выбираем этот шаблон при создании новой трассировки. Для создания шаблона используем меню Файл – Шаблоны – Новый шаблон
На первой закладке все просто. Указываем тип сервера, имя шаблона, и при необходимости ставим флаг для использования данного шаблона по умолчанию. На второй закладке производим выбор событий и настройку фильтров, как уже было показано выше. Так же рекомендую произвести настройку порядка столбцов в трассировке, это экономит время при анализе запросов. Например, мне удобнее использовать следующий порядок.
Теперь при создании новой трассировки вы можете просто указать необходимый шаблон, после этого на второй закладке все фильтры и события заполнятся автоматически.
Конечно, здесь показаны далеко не все способы использования этого замечательного инструмента, если будет интерес аудитории то в будущем можно будет пополнить коллекцию статей на эту тему.