SQL-трассировка
При трассировке SQL собираются события, классы которых указаны в ее определении. Эти события можно выделить из трассировки или поставить в очередь по своему назначению. В качестве назначения могут выступать файлы и объекты управления (SMO)SQL Server, предоставляющие сведения трассировки приложениям, которые управляют сервером SQL Server.
Важно! |
---|
В будущей версии Microsoft SQL Server этот компонент будет удален. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется. Вместо этого используйте расширенные события. |
Преимущества трассировки SQL
Для создания трассировок на экземпляре компонента Компонент SQL Server Database Engine, Microsoft SQL Server предоставляет системные хранимые процедуры на языке Transact-SQL. Эти системные хранимые процедуры можно использовать для создания трассировок вручную в рамках пользовательских приложений вместо использования приложения Приложение SQL Server Profiler. Это позволяет писать пользовательские приложения, отвечающие конкретным нуждам предприятия.
Архитектура трассировки SQL
Источником событий может быть любой источник, вызывающий события трассировки, в том числе пакеты Transact-SQL или события SQL Server, например взаимоблокировки. Дополнительные сведения о событиях см. в разделе Руководство по классам событий SQL Server. При возникновении события, класс которого содержится в определении трассировки, сведения о нем регистрируются трассировкой. Если определение трассировки содержит фильтры для класса событий, эти фильтры применяются, и сведения о событиях трассировки передается в очередь. Из очереди сведения о трассировке или записываются в файл, или используются объектами управления (SMO) сервера в таких приложениях, как Приложение SQL Server Profiler. Следующая диаграмма демонстрирует сбор событий трассировкой SQL.
Терминология, связанная с трассировкой SQL
Основные понятия трассировки SQL описываются в следующих терминах.
Событие
Возникновение действия в экземпляре компонента Microsoft Компонент SQL Server Database Engine.Столбец данных
Атрибут события.Класс событий
Тип события, которое можно трассировать. Класс событий содержит все столбцы данных, которые могут возвратить событие.Категория событий
Группа связанных классов событий.Трассировка
Коллекция событий и данных, возвращаемых Компонент Database Engine.Трассировать
Собирать и контролировать события в экземпляре SQL Server.Определениетрассировки
Коллекция классов событий, столбцов данных и фильтров, которые обозначают типы событий, которые нужно собирать при трассировке.Фильтр
Критерии, которые ограничивают собираемые при трассировке события.Файл трассировки
Файл, созданный при сохранении трассировки.Шаблон
В приложении Приложение SQL Server Profiler — файл, который определяет классы событий и столбцы данных, которые должны собираться при трассировке.Таблица трассировки
В приложении Приложение SQL Server Profiler таблица, создаваемая при сохранении трассировки в таблицу.
Использование столбцов данных для описания возвращаемых событий
Приложение трассировки SQL использует столбцы данных в результатах трассировки для описания событий, возвращенных во время работы трассировки. В следующей таблице приводится описание столбцов данных приложения Приложение SQL Server Profiler, совпадающих со столбцами данных, используемыми приложением трассировки SQL, а также описание столбцов по умолчанию.
Столбец данных |
Номер столбца |
Описание |
||
---|---|---|---|---|
ApplicationName 1 |
10 |
Имя клиентского приложения, установившего соединение с экземпляром SQL Server. Этот столбец заполняется значениями, передаваемыми приложением, а не отображаемым именем программы. |
||
BigintData1 |
52 |
Значение (типа bigint), зависящее от класса событий, указанного при трассировке. |
||
BigintData2 |
53 |
Значение (типа bigint), зависящее от класса событий, указанного при трассировке. |
||
Binary Data |
2 |
Двоичное значение, зависящее от класса событий, захваченного при трассировке. |
||
ClientProcessID 1 |
9 |
Идентификатор, присвоенный компьютером сервера процессу, в котором работает клиентское приложение. Этот столбец данных заполняется в том случае, если клиент вводит идентификатор клиентского процесса. |
||
ColumnPermissions |
44 |
Указывает, было ли установлено разрешение на доступ к столбцу. Можно выполнить синтаксический анализ текста инструкции, чтобы определить, какие разрешения были применены к каким столбцам. |
||
CPU |
18 |
Объем времени ЦП (в миллисекундах), использованного событием. |
||
Database ID 1 |
3 |
Идентификатор базы данных, указанной в инструкции USE database_name, или идентификатор базы данных по умолчанию, если для данного экземпляра инструкция USE database_nameне выполнялась. Приложение Приложение SQL Server Profiler отображает имя базы данных, если столбец ServerName захвачен при трассировке и сервер доступен. Определите идентификатор базы данных с помощью функции DB_ID. |
||
DatabaseName |
35 |
Имя базы данных, в которой выполняется инструкция пользователя. |
||
DBUserName 1 |
40 |
Имя пользователя SQL Server клиента. |
||
Duration |
13 |
Продолжительность события (в микросекундах).
|
||
EndTime |
15 |
Время окончания события. Этот столбец не заполняется для тех классов событий, которые соответствуют начинающимся событиям, для таких как SQL:BatchStarting или SP:Starting. |
||
Error |
31 |
Номер ошибки для данного события. Зачастую это номер ошибки, хранимый в таблице sysmessages. |
||
EventClass 1 |
27 |
Тип захваченного класса событий. |
||
EventSequence |
51 |
Порядковый номер этого события. |
||
EventSubClass 1 |
21 |
Тип подкласса событий, предоставляющий дополнительные сведения о каждом классе событий. Например, значения подкласса событий для класса событий Execution Warning представляет тип предупреждения при выполнении. 1 = ожидание запроса. Запрос должен ждать освобождения ресурсов для своего выполнения, например ресурсов памяти. 2 = истекло время ожидания запроса. При ожидании необходимых для выполнения запроса ресурсов истекло отведенное время. Этот столбец данных заполняется не для всех классов событий. |
||
GUID |
54 |
Значение идентификатора GUID, зависящее от класса событий, указанного при трассировке. |
||
FileName |
36 |
Логическое имя изменяемого файла. |
||
Handle |
33 |
Целочисленное значение, используемое ODBC, OLE DB или DB-Library для координации работы с сервером. |
||
HostName 1 |
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 1 |
41 |
Идентификатор безопасности (SID) подключившегося пользователя. Эти сведения можно найти в представлении sys.server_principals базы данных master. Каждому имени входа для сервера присваивается уникальный идентификатор. |
||
MethodName |
47 |
Имя вызываемого метода OLEDB. |
||
Mode |
32 |
Целочисленное значение, используемое различными событиями для описания полученного или запрашиваемого ими состояния. |
||
NestLevel |
29 |
Целочисленное представление данных, возвращаемых функцией @@NESTLEVEL. |
||
NTDomainName 1 |
7 |
Домен Microsoft Windows, к которому принадлежит пользователь. |
||
NTUserName 1 |
6 |
Имя пользователя Windows. |
||
ObjectID |
22 |
Назначенный системой идентификатор объекта. |
||
ObjectID2 |
56 |
Идентификатор связанного объекта или сущности, если он доступен. |
||
ObjectName |
34 |
Имя объекта, на который имеется ссылка. |
||
ObjectType 2 |
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 1 |
26 |
Имя отслеживаемого экземпляра SQL Server. |
||
SessionLoginName |
64 |
Имя входа пользователя, создавшего данный сеанс. Например, при подключении к SQL Server под именем Имя_входа1 и при выполнении инструкции под именем Имя_входа2 поле SessionLoginName будет содержать Имя_входа1, а поле LoginName — Имя_входа2. В данном столбце отображаются имена входа SQL Server и Windows. |
||
Severity |
20 |
Уровень серьезности события исключения. |
||
SourceDatabaseID |
62 |
Идентификатор базы данных, в которой существует источник объекта. |
||
SPID |
12 |
Идентификатор серверного процесса (SPID), который SQL Server присвоил процессу, связанному с клиентом. |
||
SqlHandle |
63 |
64-разрядная версия кэша, основанная на тексте нерегламентированного запроса или базы данных и на идентификаторе объекта SQL. Это значение может быть передано в функцию sys.dm_exec_sql_text(), чтобы получить связанный SQL-текст. |
||
StartTime 1 |
14 |
Время начала события, если доступно. |
||
Состояние |
30 |
Код ошибки состояния. |
||
Success |
23 |
Указывает, было ли событие успешным. Возможны следующие значения. 1 = успешно. 0 = сбой. Например, значение 1 означает успешную проверку разрешений, а 0 — неудавшуюся проверку. |
||
TargetLoginName |
42 |
Для действий с именем входа (например, при добавлении нового имени входа) — имя этого имени входа. |
||
TargetLoginSid |
43 |
Для действий над именем входа (например, при добавлении нового имени входа) — идентификатор SID этого имени входа. |
||
TargetUserName |
39 |
Для действий, выполняемых над пользователем базы данных (например, предоставление пользователю разрешений), — имя этого пользователя. |
||
TextData |
1 |
Текстовое значение, зависящее от класса событий, захваченного при трассировке. Однако при трассировке параметризированного запроса соответствующие переменные не отображаются со значениями типа данных в столбце TextData. |
||
Идентификатор транзакции |
4 |
Назначенный системой идентификатор транзакции. |
||
Тип |
57 |
Целочисленное значение, зависящее от класса событий, захваченного при трассировке. |
||
Writes |
17 |
Количество физических обращений записи на диск, выполненных сервером для данного события. |
||
XactSequence |
50 |
Токен, описывающий текущую транзакцию. |
1. Эти столбцы данных заполняются по умолчанию для всех событий.
2 Дополнительные сведения о столбце данных ObjectType см. в разделе Столбец события ObjectType Trace.
Задачи трассировки SQL
Описание задачи |
Раздел |
---|---|
Описывает создание и запуск трассировки с помощью хранимых процедур Transact-SQL. |
Создание и запуск трассировки с помощью хранимых процедур Transact-SQL |
Описывает создание и запуск трассировки вручную с помощью хранимых процедур на экземпляре Компонент SQL Server Database Engine. |
|
Описывает сохранение результатов трассировки в файл, куда они записывались. |
|
Описывает улучшение доступа к данным трассировки с помощью пространства в каталоге temp. |
|
Описывает создание трассировки с помощью хранимых процедур. |
|
Описывает создание фильтра, который возвращает только данные необходимые для трассируемого события, с помощью хранимых процедур. |
|
Описывает изменение существующей трассировки с помощью хранимых процедур. |
|
Описывает просмотр сохраненной трассировки с помощью встроенных функций. |
|
Описывает просмотр сведений фильтра трассировки с помощью встроенных функций. |
|
Описывает удаление трассировки с помощью хранимых процедур. |
|
Описывает сокращение потерь производительности, связанных с трассировкой. |
|
Описывает уменьшение дополнительной нагрузки, возникающей при трассировке, с помощью фильтрации. |
|
Описывает сокращение количества данных, которые собирает трассировка. |
|
Описывает два способа планирования трассировки в Microsoft SQL Server. |