可以使用 SQL Server Profiler 查看跟踪中捕获的事件数据。 SQL Server Profiler 显示基于定义的跟踪属性的数据。 分析 SQL Server 数据的一种方式是将数据复制到其他程序中,例如 SQL Server 或 数据库引擎 优化顾问。 数据库引擎优化顾问可以使用包含 SQL 批处理和远程过程调用 (RPC) 事件的跟踪文件,只要在跟踪中包括“文本”数据列即可。 为了确保捕获正确的事件和列以便与数据库引擎优化顾问一起使用,请使用随 SQL Server Profiler 一起提供的预定义优化模板。
使用 SQL Server Profiler 打开跟踪时,如果该文件是由 SQL Server Profiler 或 SQL 跟踪系统存储过程创建的,则跟踪文件不需要具有 .trc 文件扩展名。
SQL Server Profiler 还可以读取 SQL 跟踪 .log
文件和通用 SQL 脚本文件。 打开没有.log
文件扩展名的 SQL 跟踪.log
文件时,例如trace.txt
的 SQL 跟踪文件,应将SQLTrace_Log指定为文件格式。
您可以配置 SQL Server Profiler 日期和时间显示格式以便有助于跟踪分析。
数据故障排除
使用 SQL Server Profiler,您可以通过将跟踪或跟踪文件按 持续时间、CPU、读 或 写 数据列分组来故障排除。 例如,您可以对性能差的查询或逻辑读取操作数特别高的查询进行数据故障排除。
通过将跟踪保存至表和使用 Transact-SQL 查询事件数据,可以找到其他信息。 例如,若要确定哪些 SQL:BatchCompleted 事件的等待时间过长,可执行:
SELECT TextData,
Duration,
CPU
FROM trace_table_name
WHERE EventClass = 12
-- SQL:BatchCompleted events
AND CPU < (Duration * 1000);
服务器以微秒(10^-6 秒)为单位报告事件的持续时间,以毫秒(10^-3 秒)为单位报告事件占用的 CPU 时间。 SQL Server Profiler 图形用户界面默认以毫秒为单位显示 “持续时间” 列,但是当跟踪保存到文件或数据库表中时,将以微秒为单位写入“持续时间” 列值。 这些度量适用于 Transact-SQL (T-SQL) 查询。
查看跟踪时显示对象名称
如果你要显示对象名称而不是对象标识符(对象 ID),必须捕获“服务器名称”和“数据库 ID”数据列以及“对象名称”数据列。
如果您选择按 “对象 ID” 数据列分组,请确保先按 “服务器名称” 和 “数据库 ID” 数据列分组,然后按 “对象 ID” 数据列分组。 同样,如果您选择按 “索引 ID” 数据列分组,请确保先按 “服务器名称”、 “数据库 ID”和 “对象 ID” 数据列分组,然后按 “索引 ID” 数据列分组。 必须按此顺序进行分组,因为对象和索引 ID 在服务器和数据库之间不唯一(以及索引 ID 的对象之间)。
在跟踪中查找特定事件
若要查找跟踪中的事件并对事件进行分组,请按下列步骤执行操作:
创建跟踪。
定义跟踪时,除了要捕获的任何其他数据列外,还要捕获 “事件类”、 ClientProcessID和 “开始时间” 数据列。 有关详细信息,请参阅创建跟踪(SQL Server Profiler)。
按事件类数据列对捕获的数据进行分组,并将捕获的跟踪保存到文件或表中。 若要对捕获的数据进行分组,请在“跟踪属性”对话框的“事件选择”选项卡上选择“组织列”。 有关更多信息,请参阅在跟踪中显示的列进行整理(SQL Server Profiler)。
开始跟踪,并在经过适当时间或捕获了一定数量的事件后停止。
查找目标事件。
打开跟踪文件或表,并展开所需事件类的节点,例如, Deadlock Chain。 有关详细信息,请参阅打开跟踪文件(SQL Server Profiler)或打开跟踪表(SQL Server Profiler)。
搜索跟踪数据,直到找到要查找的事件(使用 SQL Server Profiler 的“编辑”菜单上的“查找”命令来帮助查找跟踪中的值)。 记录所跟踪事件的“ClientProcessID”和“开始时间”数据列中的值。
在上下文中显示事件。
显示跟踪属性,并按 ClientProcessID 数据列而不是 事件类 数据列进行分组。
展开要查看的每个客户端进程 ID 的节点。 手动搜索跟踪,或使用 “查找” ,直到找到之前记下的目标事件的 “开始时间” 值。 这些事件与属于每个选定客户端进程 ID 的其他事件一起按时间顺序进行显示。 例如,在跟踪中捕获的 死锁 和 死锁链 事件紧随扩展客户端进程 ID 中的 SQL:BatchStarting 事件之后显示。
可以使用相同的方法查找任何已分组的事件。 找到要查找的事件后,按 ClientProcessID、 ApplicationName或其他事件类分组,以便按时间顺序查看相关活动。