这两天需要搞一份我们某个系统的夜间数据库处理的所有数据,从晚上8点左右到早上9点左右都在做数据处理。所以PM希望能够看看晚上的数据处理高峰期和一些事物以及数据库的使用情况,所以需要用profiler来做个像样的分析。如果你不知道一些概念和指标,可以看看这篇文章。
SQL 事件探查器数据列:
数据列描述为跟踪内捕获的每个事件类所收集的数据。事件类确定收集的数据类型,因此并不是所有数据列都适用于所有事件类。例如,为 Lock:Acquired 事件类捕获 Binary Data 数据列时,该数据列包含锁定的页 ID 或行的值,但没有 Integer Data 事件类的值。对于所有事件类,默认数据列均为自动填充。
SQL 事件探查器使您得以在创建模板时选择数据列。这些数据列表现在运行跟踪时希望返回的信息。在 SQL 事件探查器中显示的数据可以按事件发生的顺序显示,也可以按一个数据列或数据列组合分组显示。
下表描述默认情况下选定的 SQL 事件探查器数据列。
数据列 | 列号 | 描述 |
Application Name1 | 10 | 创建与 SQL Server 实例的连接的客户端应用程序名。 该列由应用程序传递的值填充,而不是由所显示的程序名填充。 |
Binary Data | 2 | 与在跟踪中捕获的事件类相关的二进制值。 |
ClientProcessID1 | 9 | 由主机计算机分配给进程的 ID,在该进程中客户应用程序正在运行。如果客户端提供客户端进程 ID,则填充此数据列。 |
Column Permissions | 44 | 表明是否已设置了列权限。分析语句文本,以确定将哪些权限应用到了哪些列。 |
CPU | 18 | 事件所使用的 CPU 时间总计(以毫秒为单位)。 |
Database ID1 | 3 | USE database 语句所指定的数据库 ID,如果没有对给定实例发出过 USE database 语句,则是默认数据库。如果在跟踪内捕获 Server Name 数据列且服务器可用,则 SQL 事件探查器将显示数据库名。 通过使用 DB_ID 函数确定数据库的值。 |
DatabaseName | 35 | 正在运行用户语句的数据库的名称。 |
DBUserName1 | 40 | 客户端的 SQL Server 用户名。 |
Duration | 13 | 事件所花费的时间总计(以毫秒为单位)。 |
End Time | 15 | 事件结束时的时间。启动事件的事件类(如 SQL:BatchStarting 或 SP:Starting)的该列不填充。 |
Error | 31 | 给定事件的错误号。通常是存储在 sysmessages 中的错误号。 |
EventClass1 | 27 | 捕获的事件类类型。 |
EventSubClass1 | 21 | 事件子类的类型,提供有关每个事件类的进一步信息。例如,Execution Warning 事件类的事件子类值代表执行警告的类型: 1 = 查询等待。查询必须等待资源(如内存)才能执行。 |
FileName | 36 | 所修改的文件的逻辑名称。 |
Handle | 33 | ODBC、OLE DB 或 DB-Library 所用的整数,用以协调服务器的执行。 |
Host Name1 | 8 | 正运行客户端的计算机名。如果客户端提供主机名,则填充此数据列。若要确定主机名,请使用 HOST_NAME 函数。 |
Index ID | 24 | 受事件影响的对象上的索引 ID。若要确定对象的索引 ID,请使用 sysindexes 系统表的 indid 列。 |
Integer Data | 25 | 与在跟踪中捕获的事件类相关的整型值。 |
LoginName | 11 | 用户的登录名(SQL Server 安全登录或 Microsoft Windows® 登录凭据,格式为 DOMAIN/Username)。 |
LoginSid1 | 41 | 登录用户的安全标识号 (SID)。可以在 master 数据库的 sysxlogins 表中找到该信息。对于服务器中的每个登录,SID 是唯一的。 |
Mode | 32 | 不同事件所用的整数,用于描述事件已接收或要请求的状态。 |
NestLevel | 29 | 表示 @@NESTLEVEL 所返回的数据的整数。 |
NT Domain Name1 | 7 | 用户所属的 Microsoft Windows NT® 4.0 或 Windows 2000 域。 |
NT User Name1 | 6 | Windows NT 4.0 或 Windows 2000 用户名。 |
Object ID | 22 | 系统分配的对象 ID。 |
ObjectName | 34 | 引用的对象名。 |
ObjectType | 28 | 表示事件中涉及的对象类型的值。该值对应于 sysobjects 中的 type 列。 |
Owner Name | 37 | 对象所有者的数据库用户名称。 |
Permissions | 19 | 表示所检查的权限类型的整型值。取值为: 1 = SELECT ALL |
Reads | 16 | 服务器代表事件执行的逻辑磁盘读取数。 |
RoleName | 38 | 要启用的应用程序角色名。 |
Server Name1 | 26 | 跟踪的 SQL Server 实例名。 |
Severity | 20 | 异常错误的严重级别。 |
SPID1 | 12 | SQL Server 指派的与客户端相关的服务器进程 ID。 |
Start Time1 | 14 | 启动事件的时间(可用时)。 |
State | 30 | 等同于错误状态代码。 |
Success | 23 | 表示事件是否成功。取值包括: 1 = 成功。 例如,1 表示权限检查成功,0 表示该检查失败。 |
TargetLoginName | 42 | 对于以登录为目标的操作(例如,添加新登录),是目标登录的名称。 |
TargetLoginSid | 43 | 对于以目标为登录的操作(例如,添加新登录),是目标登录的 SID。 |
TargetUserName | 39 | 对于以数据库用户为目标的操作(例如授予用户权限),是该用户的名称。 |
TextData | 1 | 与跟踪内捕获的事件类相关的文本值。但是,如果正在跟踪参数化查询,则不以 TextData 列中的数据值显示变量。 |
Transaction ID | 4 | 系统分配的事务 ID。 |
Writes | 17 | 服务器代表事件执行的物理磁盘写入数。 |
所有的事件类:
事件类是描述由服务器生成的事件的列。事件类确定收集的数据类型,因此并不是所有数据列都适用于所有事件类。
每个事件类的子类都可以通过一些数据列来进行分析:
微软提供的所有事件类和数据列的对应分析如下:
最后是用户自己定义的事件类:
以我们常用的存储过程事件类来说明如何结合列进行存储过程事件类分析:
首先给出事件类和数据列的对应关系:
事件类 | 数据列 | 描述 |
RPC Output Parameter | Event Class | 记录的事件类型 = 100。 |
| Object Name | 来自 RPC 事件(如句柄)的输出参数名。 |
| Text Data | 在由远程过程调用 (RPC) 返回的对象名中命名的参数值。 |
RPC:Completed | Event Class | 记录的事件类型 = 10。 |
| End Time | RPC 的结束时间。 |
| Duration | RPC 的持续时间。 |
| CPU | RPC 所使用的 CPU 数量。 |
| Reads | 由 RPC 发出的页读取数。 |
| Writes | 由 RPC 发出的页写入数。 |
| Text Data | RPC 文本。 |
RPC:Starting | Event Class | 记录的事件类型 = 11。 |
| Text Data | RPC 文本。 |
SP:CacheHit | Event Data | 记录的事件类型 = 38。 |
| Object ID | 在高速缓存中找到的存储过程的对象 ID。 |
| Object Name | 在高速缓存中找到的存储过程名。 |
| Text Data | 在高速缓存中找到的 SQL 语句的文本。 |
SP:CacheInsert | Event Class | 记录的事件类型 = 35。 |
| Object ID | 存储过程的对象 ID。 |
| Object Name | 在高速缓存中找到的存储过程名。 |
| Text Data | 正在高速缓存的 SQL 语句的文本。 |
SP:CacheMiss | Event Class | 记录的事件类型 = 34。 |
| Event Sub Class | 存储过程的嵌套级。 |
| Object Name | 在高速缓存中找到的存储过程名。 |
SP:CacheRemove | Event Class | 记录的事件类型 = 36。 |
| Object ID | 存储过程的对象 ID。 |
| Object Name | 在高速缓存中找到的存储过程名。 |
| Text Data | 正在从高速缓存中删除的 SQL 语句的文本。 |
SP:Completed | Event Class | 记录的事件类型 = 43。 |
| Nest Level | 存储过程的嵌套级。 |
| End Time | 事件的结束时间。 |
| Duration | 存储过程运行的时间长度。 |
| Object ID | 存储过程的对象 ID。 |
| Object Name | 在高速缓存中找到的存储过程名。 |
| Object Type | 调用的存储过程类型。 |
| Text Data | 存储过程调用的文本。 |
SP:ExecContextHit | Event Class | 记录的事件类型 = 39。 |
| Object ID | 存储过程的对象 ID。 |
| Object Name | 在高速缓存中找到的存储过程名。 |
| Text Data | 在高速缓存中找到的存储过程的文本。 |
SP:Recompile | Event Class | 记录的事件类型 = 37。 |
| Nest Level | 存储过程的嵌套级。 |
| Object ID | 存储过程的对象 ID。 |
| Object Name | 在高速缓存中找到的存储过程名。 |
| Text Data | 触发重新编译的存储过程的文本。 |
SP:Starting | Event Class | 记录的事件类型 = 42。 |
| Nest Level | 存储过程的嵌套级。 |
| Object ID | 存储过程的对象 ID。 |
| Object Name | 在高速缓存中找到的存储过程名。 |
| Object Type | 正在启动的存储过程类型。 |
| Text Data | 存储过程调用的文本。 |
SP:StmtCompleted | Event Class | 记录的事件类型 = 45。 |
| Event Sub Class | 存储过程的嵌套级。 |
| Integer Data | 语句返回的实际行数。 |
| Object ID | 系统指派的存储过程 ID。 |
| Text Data | 存储过程内的语句文本。 |
SP:StmtStarting | Event Class | 记录的事件类型 = 44。 |
| Event Sub Class | 存储过程的嵌套级。 |
| Object ID | 系统指派的存储过程 ID。 |
| Text Data | 存储过程内的语句文本。 |
然后是每个子事件类的说明:
事件类 | 描述 |
RPC Output Parameter | 显示有关先前执行的远程过程调用 (RPC) 的输出参数的信息。 |
RPC:Completed | 在已完成 RPC 后发生。 |
RPC:Starting | 在 RPC 已启动后发生。 |
SP:CacheHit | 在高速缓存内找到过程。 |
SP:CacheInsert | 有项目插入过程高速缓存内。 |
SP:CacheMiss | 在过程高速缓存内没找到存储过程。 |
SP:CacheRemove | 项目已从过程高速缓存中删除。 |
SP:Completed | 存储过程已完成。 |
SP:ExecContextHit | 在高速缓存内找到存储过程的执行版本。 |
SP:Recompile | 存储过程已重新编译。 |
SP:Starting | 存储过程已启动。 |
SP:StmtCompleted | 存储过程内的语句已完成。 |
SP:StmtStarting | 存储过程内的语句已启动。 |