在 SQL 跟踪中,如果事件是在跟踪定义中列出的事件类的实例,则收集这些事件。可以将这些事件从跟踪中筛选出来或为其目标进行排队。目标可以是文件或 SQL Server 管理对象 (SMO),它可以使用管理 SQL Server 的应用程序中的跟踪信息。
Microsoft SQL Server 提供 Transact-SQL 系统存储过程来创建对 SQL Server 数据库引擎实例的跟踪。可以不使用 SQL Server Profiler,而使用这些系统存储过程从您自己的应用程序中手动创建跟踪。这样,您就可以针对企业的特定需求编写自定义应用程序。
事件源可以是生成跟踪事件(例如 Transact-SQL 批处理)或 SQL Server 事件(例如死锁)的任何源。有关事件的详细信息,请参阅 。事件发生后,如果该事件类已经包含在跟踪定义中,则跟踪将收集该事件信息。如果已经在跟踪定义中为该事件类定义筛选器,则将应用这些筛选器并将跟踪事件信息传递到队列。从队列中,跟踪信息或者被写入文件,或者由应用程序(例如 SQL Server Profiler)中的 SMO 使用。以下关系图显示了在跟踪期间 SQL 跟踪如何收集事件。
跟踪运行时,SQL 跟踪使用跟踪输出中的数据列来描述返回的事件。下表说明了 SQL Server Profiler 数据列(这些数据列与 SQL 跟踪使用的数据列相同),并指示默认情况下选择的列。
数据列 | 列号 | 说明 |
---|---|---|
ApplicationName 1 | 10 | 客户端应用程序的名称,该客户端应用程序创建了指向 SQL Server 实例的连接。此列由该应用程序传递的值填充,而不是由程序名填充的。 |
BigintData1 | 52 | 值 (bigint 数据类型),取决于跟踪中指定的事件类。 |
BigintData2 | 53 | 值 (bigint 数据类型),取决于跟踪中指定的事件类。 |
Binary Data | 2 | 依赖于跟踪中捕获的事件类的二进制值。 |
ClientProcessID 1 | 9 | 由主机分配给正在运行客户端应用程序的进程的 ID。如果客户端提供了客户端进程 ID,则填充此数据列。 |
ColumnPermissions | 44 | 表示是否已设置了列权限。可以分析语句文本来确定各列所应用权限的情况。 |
CPU | 18 | 事件使用的 CPU 时间(毫秒)。 |
Database ID1 | 3 | 由 USE database_name 语句指定的数据库的 ID;如果未对给定实例发出 USE database_name语句,则为默认数据库的 ID。如果在跟踪中捕获 ServerName 数据列而且服务器可用,则 SQL Server Profiler 将显示数据库名。若要确定数据库的值,请使用 DB_ID 函数。 |
DatabaseName | 35 | 正在运行用户语句的数据库的名称。 |
DBUserName 1 | 40 | 客户端的 SQL Server 用户名。 |
Duration | 13 | 事件的持续时间(微秒)。 服务器以微秒(百万分之一秒或 10-6 秒)为单位报告事件的持续时间,以毫秒(千分之一秒或 10-3 秒)为单位报告事件使用的 CPU 时间。SQL Server Profiler 图形用户界面默认以毫秒为单位显示“持续时间”列,但是当跟踪保存到文件或数据库表中时,将以微秒为单位写入“持续时间”列值。 |
EndTime | 15 | 事件的结束时间。对指示事件开始的事件类(例如 SQL:BatchStarting 或SP:Starting)将不填充此列。 |
Error | 31 | 给定事件的错误号。通常是 sysmessages 中存储的错误号。 |
EventClass1 | 27 | 捕获的事件类的类型。 |
EventSequence | 51 | 此事件的序列号。 |
EventSubClass 1 | 21 | 事件子类的类型,提供有关每个事件类的详细信息。例如,Execution Warning 事件类的事件子类值代表执行警告的类型: 1 = 查询等待。查询执行之前必须等待资源;例如,内存。 2 = 查询超时。查询等待执行所需资源时超时。对于所有事件类,均不填充此数据列。 |
GUID | 54 | 依赖于跟踪中指定的事件类的 GUID 值。 |
FileName | 36 | 所修改的文件的逻辑名称。 |
Handle | 33 | 一个整数,ODBC、OLE DB 或 DB-Library 使用它来协调服务器的执行情况。 |
HostName1 | 8 | 正在运行客户端程序的计算机的名称。如果客户端提供了主机名,则填充此数据列。若要确定主机名,请使用 HOST_NAME 函数。 |
IndexID | 24 | 受事件影响的对象的索引 ID。若要确定对象的索引 ID,请参见 sysindexes 系统表的 indid 列。 |
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)。您可以在 master 数据库的 sys.server_principals 视图中找到此信息。服务器中的每个登录名都具有唯一的 ID。 |
MethodName | 47 | OLEDB 方法的名称。 |
Mode | 32 | 一个整数,各种事件都使用它来描述事件要请求或已接收的状态。 |
NestLevel | 29 | 一个整数,表示 @@NESTLEVEL 返回的数据。 |
NTDomainName 1 | 7 | 用户所属的 Microsoft Windows 域。 |
NTUserName 1 | 6 | Windows 用户名。 |
ObjectID | 22 | 系统分配的对象 ID。 |
ObjectID2 | 56 | 相关对象或实体(如果存在)的 ID。 |
ObjectName | 34 | 被引用对象的名称。 |
ObjectType2 | 28 | 表示事件中涉及的对象类型的值。该值对应于 sysobjects 中的 type 列。 |
Offset | 61 | 语句在存储过程或批处理中的起始偏移量。 |
OwnerID | 58 | 仅限锁事件。拥有锁的对象的类型。 |
OwnerName | 37 | 对象所有者的数据库用户名。 |
ParentName | 59 | 该对象所在的架构的名称。 |
Permissions | 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 | 包含该语句的请求的 ID。 |
RoleName | 38 | 正在启用的应用程序角色名。 |
RowCounts | 48 | 批处理中的行数。 |
ServerName 1 | 26 | 正在跟踪的 SQL Server 实例的名称。 |
SessionLoginName | 64 | 发起会话的用户的登录名。例如,如果您使用 Login1 连接到 SQL Server 并以 Login2 身份执行语句,则SessionLoginName 将显示 Login1,而 LoginName 将显示 Login2。此数据列将同时显示 SQL Server 登录名和 Windows 登录名。 |
Severity | 20 | 异常错误事件的严重级别。 |
SourceDatabaseID | 62 | 存在该对象的源的数据库 ID。 |
SPID | 12 | SQL Server 为客户端的相关进程分配的服务器进程 ID (SPID)。 |
SqlHandle | 63 | 基于即席查询文本或 SQL 对象的数据库和对象 ID 的 64 位哈希运算。可以将该值传递到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 列中的数据值显示变量。 |
Transaction ID | 4 | 系统为事务分配的 ID。 |
类型 | 57 | 跟踪中捕获的与事件类对应的整数值。 |
Writes | 17 | 由服务器代表事件写入物理磁盘的次数。 |
XactSequence | 50 | 用于说明当前事务的标记。 |
1 默认情况下,对于所有事件,均填充这些数据列。
2 有关 ObjectType 数据列的详细信息,请参阅。
任务说明 | 主题 |
---|---|
介绍如何使用 TRANSACT-SQL 存储过程创建和运行跟踪。 |
|
介绍如何在 SQL Server 数据库引擎实例上使用存储过程创建手动跟踪。 |
|
介绍如何将跟踪结果保存到跟踪结果所写入的文件。 |
|
介绍如何使用 temp 目录中的空间来提高访问跟踪数据的性能。 |
|
介绍如何使用存储过程创建跟踪。 |
|
介绍如何使用存储过程创建只检索有关所需跟踪事件信息的筛选器。 |
|
介绍如何使用存储过程修改现有跟踪。 |
|
介绍如何使用内置函数查看保存的跟踪。 |
|
介绍如何使用内置函数查看跟踪筛选器信息。 |
|
介绍如何使用存储过程删除跟踪。 |
|
介绍如何将跟踪引起的性能损失降到最低。 |
|
介绍如何筛选跟踪以将跟踪过程中的开销降到最低。 |
|
介绍如何将跟踪收集的数据量降至最低。 |
|
介绍在 Microsoft SQL Server 中计划跟踪的两种方法。 |
|