Трассировка SQL

Применимо к:SQL Server

При трассировке SQL собираются события, классы которых указаны в ее определении. Эти события можно выделить из трассировки или поставить в очередь по своему назначению. Назначение может быть файлом или объектами управления SQL Server (SMO), которые могут использовать сведения трассировки в приложениях, управляющих SQL Server.

Внимание

SQL Trace и SQL Server Profiler устарели. Пространство имен Microsoft.SqlServer.Management.Trace, которое содержит объекты трассировки Microsoft SQL Server и Replay, также устаревшее.

Эта функция будет удалена в будущей версии SQL Server. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется.

Вместо этого используйте расширенные события. Дополнительные сведения о расширенных событиях см. в статьях Краткое руководство. Расширенные события в SQL Server и Использование профилировщика XEvent для SSMS.

Преимущества трассировки SQL

Microsoft SQL Server предоставляет хранимые процедуры Transact-SQL для создания трассировок на экземпляре ядро СУБД SQL Server. Эти системные хранимые процедуры можно использовать из собственных приложений для создания трассировок вручную, а не с помощью SQL Server Profiler. Это позволяет писать пользовательские приложения, отвечающие конкретным нуждам предприятия.

Архитектура трассировки SQL

Источники событий могут быть любым источником, который создает событие трассировки, например пакеты Transact-SQL или события SQL Server, например взаимоблокировки. Дополнительные сведения о событиях см. в разделе SQL Server Event Class Reference. При возникновении события, класс которого содержится в определении трассировки, сведения о нем регистрируются трассировкой. Если определение трассировки содержит фильтры для класса событий, эти фильтры применяются, и сведения о событиях трассировки передается в очередь. В очереди данные трассировки записываются в файл или могут использоваться SMO в приложениях, таких как SQL Server Profiler. Следующая диаграмма демонстрирует сбор событий трассировкой SQL.

Database Engine event tracing process

Терминология, связанная с трассировкой SQL

Основные понятия трассировки SQL описываются в следующих терминах.

Событие
Вхождение действия в экземпляре ядро СУБД Microsoft SQL Server.

Столбец данных
Атрибут события.

Класс событий
Тип события, которое можно трассировать. Класс событий содержит все столбцы данных, которые могут возвратить событие.

Категория событий
Группа связанных классов событий.

Трассировка
Коллекция событий и данных, возвращаемых компонентом Database Engine.

Трассировать
Сбор и мониторинг событий в экземпляре SQL Server.

Определение трассировки
Коллекция классов событий, столбцов данных и фильтров, которые обозначают типы событий, которые нужно собирать при трассировке.

Фильтр
Критерии, которые ограничивают собираемые при трассировке события.

Файл трассировки
Файл, созданный при сохранении трассировки.

Шаблон
В SQL Server Profiler файл, определяющий классы событий и столбцы данных, собираемые в трассировке.

Таблица трассировки
В SQL Server Profiler таблица, созданная при сохранении трассировки в таблице.

Использование столбцов данных для описания возвращаемых событий

Приложение трассировки SQL использует столбцы данных в результатах трассировки для описания событий, возвращенных во время работы трассировки. В следующей таблице описываются столбцы данных SQL Server Profiler, которые являются теми же столбцами данных, что и для трассировки SQL, а также столбцы, выбранные по умолчанию.

Столбец данных Номер столбца Description
* ApplicationName 10 Имя клиентского приложения, создавшего подключение к экземпляру SQL Server. Этот столбец заполняется значениями, передаваемыми приложением, а не отображаемым именем программы.
BigintData1 52 Значение (типаbigint ), зависящее от класса событий, указанного при трассировке.
BigintData2 53 Значение (типаbigint ), зависящее от класса событий, указанного при трассировке.
* Binary Data 2 Двоичное значение, зависящее от класса событий, захваченного при трассировке.
* ClientProcessID 9 Идентификатор, присвоенный компьютером сервера процессу, в котором работает клиентское приложение. Этот столбец данных заполняется в том случае, если клиент вводит идентификатор клиентского процесса.
ColumnPermissions 44 Указывает, было ли установлено разрешение на доступ к столбцу. Можно выполнить синтаксический анализ текста инструкции, чтобы определить, какие разрешения были применены к каким столбцам.
* ЦП 18 Объем времени ЦП (в миллисекундах), использованного событием.
Идентификатор базы данных 3 Идентификатор базы данных, указанной в инструкции USE database_name , или базы данных по умолчанию, если для данного экземпляра инструкция USE database_nameне выполнялась. Sql Server Profiler отображает имя базы данных, если столбец данных ServerName фиксируется в трассировке и сервер доступен. Определите значение для базы данных, используя функцию DB_ID.
DatabaseName 35 Имя базы данных, в которой выполняется инструкция пользователя.
DBUserName 40 Имя пользователя SQL Server клиента.
* Длительность 13 Продолжительность события (в микросекундах).

Сервер сообщает о длительности события в микросекундах (одна миллионная доля секунды, 10-6с) и о количестве времени ЦП, затраченного на событие, в миллисекундах (одна тысячная доля секунды, 10-3с). Графический пользовательский интерфейс SQL Server Profiler отображает столбец "Длительность" в миллисекундах по умолчанию, но при сохранении трассировки в файле или таблице базы данных значение столбца "Длительность" записывается в микросекунды.
* EndTime 15 Время окончания события. Этот столбец не заполняется для тех классов событий, которые соответствуют начинающимся событиям, для таких как SQL:BatchStarting или SP:Starting.
Ошибка 31 Номер ошибки для данного события. Зачастую это номер ошибки, хранимый в таблице sysmessages.
* EventClass 27 Тип захваченного класса событий.
EventSequence 51 Порядковый номер этого события.
EventSubClass 21 Тип подкласса событий, предоставляющий дополнительные сведения о каждом классе событий. Например, значения подкласса событий для класса событий Execution Warning представляет тип предупреждения при выполнении.

1 = ожидание запроса. Запрос должен ждать освобождения ресурсов для своего выполнения, например ресурсов памяти.

2 = время ожидания запроса. Время ожидания выполнения запроса при ожидании выполнения необходимых ресурсов. Этот столбец данных заполняется не для всех классов событий.
GUID 54 Значение идентификатора GUID, зависящее от класса событий, указанного при трассировке.
FileName 36 Логическое имя изменяемого файла.
Дескриптор 33 Целочисленное значение, используемое ODBC, OLE DB или DB-Library для координации работы с сервером.
HostName 8 Имя компьютера, на котором выполняется клиентская программа. Заполнение этого столбца данных производится в том случае, если клиент предоставляет имя узла. Чтобы определить имя узла, используйте функцию HOST_NAME.
IndexID 24 Идентификатор индекса объекта, связанного с событием. Чтобы определить идентификатор индекса для объекта, используйте столбец indid в системной таблице sysindexes .
IntegerData 25 Целочисленное значение, зависящее от класса событий, захваченного при трассировке.
IntegerData2 55 Целочисленное значение, зависящее от класса событий, захваченного при трассировке.
IsSystem 60 Указывает, в каком процессе произошло событие, в системном или в пользовательском.

1 = системный процесс

0 = пользовательский процесс
LineNumber 5 Содержит номер строки, в которой имеется ошибка. Для событий, включающих инструкции Transact-SQL, такие как SP:StmtStarting, номер LineNumber содержит номер строки инструкции в хранимой процедуре или пакете.
LinkedServerName 45 Имя связанного сервера.
* LoginName 11 Имя входа пользователя (имя входа безопасности SQL Server или учетные данные входа Windows в формате ДОМЕН\Имя_пользователя).
LoginSid 41 Идентификатор безопасности (SID) подключившегося пользователя. Эти сведения можно найти в представлении sys.server_principals базы данных master . Каждому имени входа для сервера присваивается уникальный идентификатор.
MethodName 47 Имя вызываемого метода OLEDB.
Режим 32 Целочисленное значение, используемое различными событиями для описания полученного или запрашиваемого ими состояния.
NestLevel 29 Целочисленное представление данных, возвращаемых функцией @@NESTLEVEL.
NTDomainName 7 Домен Microsoft Windows, к которому принадлежит пользователь.
* NTUserName 6 Имя пользователя Windows.
ObjectID 22 Назначенный системой идентификатор объекта.
ObjectID2 56 Идентификатор связанного объекта или сущности, если он доступен.
ObjectName 34 Имя объекта, на который имеется ссылка.
**ObjectType 28 Значение, представляющее тип объекта, который участвует в событии. Это значение соответствует столбцу type в таблице sysobjects.
Offset 61 Начальное смещение инструкции в пределах хранимой процедуры или пакета.
OwnerID 58 Только для событий блокировки. Тип объекта, которому принадлежит блокировка.
OwnerName 37 Имя пользователя базы данных, владеющего объектом.
ParentName 59 Имя схемы, в которой находится объект.
Разрешения 19 Целочисленное значение, отражающее тип проверяемых разрешений. Значения:

1 = SELECT ALL

2 = UPDATE ALL

4 = REFERENCES ALL

8 = INSERT

16 = DELETE

32 = EXECUTE (только для процедур)

4096 = SELECT ANY (как минимум один столбец)

8192 = UPDATE ANY

16384 = REFERENCES ANY
ProviderName 46 Имя поставщика OLEDB.
* Reads 16 Количество операций чтения с логического диска, выполненных сервером для данного события. Эти операции чтения включают в себя все операции чтения из таблиц и буферов при выполнении данной инструкции.
RequestID 49 Идентификатор запроса, содержащего инструкцию.
RoleName 38 Имя включаемой роли приложения.
RowCounts 48 Количество строк в пакете.
ServerName 26 Имя отслеживаемого экземпляра SQL Server.
SessionLoginName 64 Имя входа пользователя, который инициировал сеанс. Например, если вы подключаетесь к SQL Server с помощью Login1 и выполняете инструкцию login2, SessionLoginName отображает Login1, а Имя входа отображает Login2. В этом столбце данных отображаются имена входа SQL Server и Windows.
Уровень серьезности 20 Уровень серьезности события исключения.
SourceDatabaseID 62 Идентификатор базы данных, в которой существует источник объекта.
* SPID 12 Идентификатор процесса сервера (SPID), назначенный SQL Server процессу, связанному с клиентом.
SqlHandle 63 64-разрядная версия хэша, основанная на тексте нерегламентированного запроса или базы данных и на идентификаторе объекта SQL. Это значение можно передать в функцию sys.dm_exec_sql_text() , чтобы получить связанный текст SQL.
* StartTime 14 Время начала события, если доступно.
Штат 30 Код ошибки состояния.
Успешно 23 Указывает, было ли событие успешным. Доступные значения:

1 = успешное завершение.

0 = неуспешное завершение.

Например, значение 1 означает успешную проверку разрешений, а 0 — неудавшуюся проверку.
TargetLoginName 42 Для действий с именем входа (например, при добавлении нового имени входа) — имя этого имени входа.
TargetLoginSid 43 Для действий над именем входа (например, при добавлении нового имени входа) — идентификатор SID этого имени входа.
TargetUserName 39 Для действий, выполняемых над пользователем базы данных (например, предоставление пользователю разрешений), — имя этого пользователя.
* TextData 1 Текстовое значение, зависящее от класса событий, захваченного при трассировке. Однако при трассировке параметризированного запроса соответствующие переменные не отображаются со значениями типа данных в столбце TextData .
Transaction ID 4 Назначенный системой идентификатор транзакции.
Тип 57 Целочисленное значение, зависящее от класса событий, захваченного при трассировке.
* Writes 17 Количество физических обращений записи на диск, выполненных сервером для данного события.
XactSequence 50 Токен, описывающий текущую транзакцию.

* Эти столбцы данных заполняются по умолчанию для всех событий.

** Дополнительные сведения о столбце данных ObjectType см. в столбце событий ObjectType Trace.

Задачи трассировки SQL

Описание задачи Раздел
Описывает создание и запуск трассировки с помощью хранимых процедур Transact-SQL. Создание и запуск трассировки с помощью хранимых процедур Transact-SQL
Описывает создание трассировок вручную с помощью хранимых процедур в экземпляре SQL Server ядро СУБД. Создание трассировок вручную с помощью хранимых процедур
Описывает сохранение результатов трассировки в файл, куда они записывались. Сохранение результатов трассировки в файл
Описывает улучшение доступа к данным трассировки с помощью пространства в каталоге temp . Улучшение доступа к данным трассировки
Описывает создание трассировки с помощью хранимых процедур. Создание трассировки (Transact-SQL)
Описывает создание фильтра, который возвращает только данные необходимые для трассируемого события, с помощью хранимых процедур. Создание фильтра трассировки (Transact-SQL)
Описывает изменение существующей трассировки с помощью хранимых процедур. Изменение существующей трассировки (Transact-SQL)
Описывает просмотр сохраненной трассировки с помощью встроенных функций. Просмотр сохраненной трассировки (Transact-SQL)
Описывает просмотр сведений фильтра трассировки с помощью встроенных функций. Просмотр сведений о фильтрах (Transact-SQL)
Описывает удаление трассировки с помощью хранимых процедур. Удаление трассировки (Transact-SQL)
Описывает сокращение потерь производительности, связанных с трассировкой. Оптимизация трассировки SQL
Описывает уменьшение дополнительной нагрузки, возникающей при трассировке, с помощью фильтрации. Фильтрация трассировки
Описывает сокращение количества данных, которые собирает трассировка. Ограничение размеров файла и таблицы трассировки
Описывает два способа планирования трассировки в Microsoft SQL Server. Планирование трассировок

См. также

Шаблоны и разрешения приложения SQL Server Profiler
Учебник по программированию управляющих объектов SQL Server (SMO)