优化 SQL 跟踪

适用于:SQL Server

尽管运行 SQL 跟踪会导致性能损失(因为它使用系统资源收集数据),但是你可以通过多种方法将性能损失降到最低。 若要将跟踪引起的性能损失降到最低,可以尝试下列解决方法:

  • 请考虑使用命令提示运行跟踪。 使用图形用户界面会影响性能。 有关详细信息,请参阅 sp_trace_create (Transact-SQL)

  • 避免包含频繁发生的事件。 如果可能,通过特定事件类和筛选器来缩小跟踪范围。 收集的跟踪事件越少,支持跟踪所需的系统资源就越少。

  • 集中跟踪以仅收集提供相关数据的事件。 例如,如果你的跟踪用于标识死锁,则包括 Lock:Deadlock 事件类,而不包括 Lock:Acquired 事件类。 如果同时包括这两个事件类,则跟踪将必须响应获取的每个锁,执行成本将加倍。

  • 避免收集重复数据。 例如,如果收集 SQL:BatchStartedSQL:BatchCompleted,则可以通过仅收集 SQL:BatchStarted 事件类的文本数据来最小化结果集的大小。

  • 在跟踪定义中使用筛选器。 例如,如果你知道某个用户在即席查询期间报告较慢性能,则对 LoginName 创建筛选器。 将筛选器设置为仅包含 LoginName 与该用户名匹配的事件。

如果需要跟踪对性能产生极大影响的事件,请考虑使用下列一种方法来限制对服务器性能的影响:

  • 短时间运行跟踪。 你可以通过启用停止时间来控制跟踪运行的时间长度。 这在你无法限制事件类或筛选事件的情况下非常重要。 启用停止时间可以确保性能不会无限期地受到影响。

  • 限制跟踪结果的大小。 你可以将跟踪结果的大小限制为最大文件大小。 此策略可以确保在达到文件大小限制时停止性能损失(如果未启用文件滚动更新)。

  • 限制返回的事件数。 使用 SQL Server Profiler,可以通过将跟踪保存到表并设置最大行数来限制返回的事件数。 达到最大行数后,跟踪结果仍会返回到 SQL Server Profiler 屏幕,但不再有将结果记录到表的开销。

另请参阅

筛选跟踪