使用 SQL Server Profiler 查看和分析跟踪

更新日期: 2006 年 12 月 12 日

可以使用 SQL Server Profiler查看跟踪中捕获的事件数据。SQL Server Profiler基于定义的跟踪属性显示数据。分析 SQL Server 数据的一种方式是将数据复制到其他程序中,例如 SQL Server 2005 或数据库引擎优化顾问。如果跟踪中包括**“文本”**数据列,则数据库引擎优化顾问可以使用包含 SQL 批处理和远程过程调用 (RPC) 事件的跟踪文件。有关详细信息,请参阅优化物理数据库设计。为了确保捕获正确的事件和列以便与数据库引擎优化顾问一起使用,请使用随 SQL Server Profiler一起提供的预定义优化模板。

使用 SQL Server Profiler打开跟踪时,如果跟踪文件是由 SQL Server Profiler或 SQL 跟踪系统存储过程创建的,则该文件不需要带 .trc 文件扩展名。

ms175848.note(zh-cn,SQL.90).gif注意:
SQL Server Profiler还可以读取 SQL 跟踪 .log 文件和通用 SQL 脚本文件。打开不带 .log 文件扩展名的 SQL 跟踪 .log 文件(例如 trace.txt)时,应将文件格式指定为 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)
ms175848.note(zh-cn,SQL.90).gif注意:
在 SQL Server 2005 中,服务器以微秒(百万分之一秒或 10-6 秒)为单位报告事件的持续时间,以毫秒(千分之一秒或 10-3 秒)为单位报告事件使用的 CPU 时间。在 SQL Server 2000 中,服务器以毫秒为单位报告持续时间和 CPU 时间。在 SQL Server 2005 中,SQL Server Profiler图形用户界面默认以毫秒为单位显示“持续时间”列,但是当跟踪保存到文件或数据库表中之后,将以微秒为单位在“持续时间”列中写入值。

查看跟踪时显示对象名称

如果您要显示对象名称而不是对象标识符(对象 ID),必须捕获**“服务器名称”“数据库 ID”数据列以及“对象名称”**数据列。

如果您选择按**“对象 ID”数据列分组,请确保先按“服务器名称”“数据库 ID”数据列分组,然后按“对象 ID”数据列分组。同样,如果您选择按“索引 ID”数据列分组,请确保先按“服务器名称”“数据库 ID”“对象 ID”数据列分组,然后按“索引 ID”**数据列分组。您必须按照此顺序分组,因为对象 ID 和索引 ID 在服务器和数据库之间并不是唯一的,而索引 ID 甚至在各对象之间都不是唯一的。

查找跟踪内的特定事件

若要查找跟踪中的事件并对事件进行分组,请按下列步骤执行操作:

  1. 创建跟踪。
    • 定义跟踪时,除了要捕获的任何其他数据列外,还要捕获**“事件类”ClientProcessID“开始时间”**数据列。有关详细信息,请参阅如何创建跟踪 (SQL Server Profiler)
    • 按**“事件类”数据列将捕获的数据分组,并将跟踪捕获至文件或表。若要将捕获的数据分组,请单击“跟踪属性”对话框中“事件选择”选项卡中的“组织列”**。有关详细信息,请参阅如何组织跟踪中显示的列 (SQL Server Profiler)
    • 开始跟踪,并在经过适当时间或捕获了一定数量的事件后停止。
  2. 查找目标事件。
    • 打开跟踪文件或表,并展开所需事件类的节点,例如,Deadlock Chain。有关详细信息,请参阅如何打开跟踪文件 (SQL Server Profiler)如何打开跟踪表 (SQL Server Profiler)
    • 在跟踪数据中搜索直到找到所需的事件(使用 SQL Server Profiler的**“编辑”菜单上的“查找”命令帮助查找跟踪中的值)。记录所跟踪事件的 ClientProcessID“开始时间”**数据列中的值。
  3. 在上下文中显示事件。
    • 显示跟踪属性,并按 ClientProcessID 数据列分组而不是按**“事件类”**数据列分组。
    • 展开要查看的每个客户端进程 ID 的节点。手动搜索整个跟踪,或使用**“查找”直到找到目标事件先前标记的“开始时间”**值。这些事件与属于每个所选客户端进程 ID 的其他事件一起按照时间顺序显示,例如,在跟踪中捕获的 DeadlockDeadlock Chain 事件紧接着展开的客户端进程 ID 中的 SQL:BatchStarting 事件后面显示。

可以使用相同的方法查找任何已分组的事件。找到要查找的事件后,按 ClientProcessID、**“应用程序名称”**或其他事件类分组,以便按时间顺序查看相关活动。

请参阅

任务

如何查看保存的跟踪 (Transact-SQL)
如何查看筛选器信息 (SQL Server Profiler)
如何查看筛选器信息 (Transact-SQL)
如何打开跟踪文件 (SQL Server Profiler)
如何打开跟踪文件 (SQL Server Profiler)
如何打开跟踪表 (SQL Server Profiler)

其他资源

fn_trace_getinfo (Transact-SQL)

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

发布日期 历史记录

2006 年 12 月 12 日

更改的内容:
  • 更正了“排除数据故障”部分(其中使用了“持续时间”列单位)中的代码示例。

2005 年 12 月 5 日

新增内容:
  • 在“排除数据故障”(介绍针对跟踪事件中的“持续时间”列从毫秒到微秒的更改)部分的结尾添加了说明。
更改的内容:
  • 更正了“排除数据故障”部分中的代码示例以完善对“持续时间”列的单位(从毫秒到微秒)的更改。