是否记录了 SQLTRACE_FILE_BUFFER 等待类型?它说明什么?

Ed *_*per 6 sql-server sql-server-2008-r2 wait-types

我们在其中一台服务器上运行后台任务,该任务轮询sys.dm_exec_requests长时间运行的查询,并在找到它们时收集诊断信息,包括等待类型。

我在SQLTRACE_FILE_BUFFER等待中看到了许多查询。这在我看过的任何地方都没有记录 - 我想知道是否有人有关于这种等待类型的更多信息?

顾名思义,将跟踪数据写入磁盘存在延迟;我们在实例上运行了一个服务器端跟踪,该跟踪会写入文件以进行审计和性能监控。

SAN 管理员告诉我我们有可用的 IOPS,所以我认为这不是一个简单的 I/O 问题。我还应该检查什么?

更新

我们禁用了服务器端跟踪并继续看到相同的问题;最新的想法是SQLTRACE_FILE_BUFFER等待是内存压力的症状(在将跟踪缓冲区写入磁盘时使用了不同的记录等待类型 - SQLTRACE_BUFFER_FLUSH- 没有出现)。

更新 2

禁用默认跟踪将删除等待。我们仍在调查性能问题的根本原因。

Aar*_*and 7

我不相信它在任何地方都有记录(即使在Bob Ward 的 Wait Type Repository - 在任何情况下都是有用的资源),我怀疑你对根本原因是完全正确的。

如果这种等待类型似乎给您带来了严重的性能问题(并且您已经将等待作为原因而不是症状,通过观察临时禁用跟踪时缓解的压力),可能最好的办法是调查跟踪并确保:

  • 您正在充分过滤以防止写入您永远不会看到的数据。
  • 您只捕获所需的事件类型。
  • 您没有写入严重不足或过度使用的磁盘,写入数据/日志文件所在的相同本地磁盘,或通过无法处理负载的网络连接(如果远程写入等待可能不会显示为网络 - 特别是如果写入是通过 iSCSI 或其他远程磁盘进行的,这种远程磁盘看起来像是一种本地到 SQL 服务器)。

对于您的跟踪可能正在收集的大多数内容,最好将您的跟踪转换为使用Extended Events。并不是所有的东西都比 trace 更轻量级,但大部分都是。Microsoft 的 EE 团队发表了关于如何执行此操作的博客,但如果您计划迁移到 SQL Server 2012,您将需要观看Jonathan Kehayias 的博客