运行 DBCC TRACEON (3502, 3504, 3605, -1) 时如何解释日志

mel*_*onk 3 sql-server dbcc sql-server-2008-r2

我一直在使用 DBCC Traceon (3502, 3504, 3605, -1) 因为它在博客中被推荐用于发现与 I/O 相关的性能问题。我正在运行 MS SQL Server 2008 R2 SP1

我的 SQL 日志文件中的结果看起来像这样(数字有点模糊):

即将记录检查点结束

最后一个目标未完成 2,avgWriteLatency 40ms

平均吞吐量:0.67 MB/秒,I/O 饱和度:79,上下文切换 201

FlushCache:在 1447 毫秒内清理了 69 次写入的 125 个缓冲区(避免了 0 个新的脏缓冲区)

ckpt dbid 9 第一阶段结束 (8)

即将登录检查点开始。

我真的不知道如何阅读这篇文章,或者以一种我从中得到任何真正有意义的东西的方式来分解它。

“最后一个目标未完成”是什么意思?

平均写入延迟是否意味着每次写入所需的开销时间?或写入之间的时间?40ms 似乎很高,物理驱动器是 1TB,并且是 RAID5 配置。

什么是 I/O 饱和?

它与上下文切换有什么关系。我假设上下文切换与多任务处理有关。在作业/写入之间切换。

刷新缓存。我意识到这与清除缓存有关。什么是Buf?这些数据页是需要写入的吗?什么是肮脏的 Buf?为什么要避免它们?

详细的分解将不胜感激。

Kin*_*hah 5

您打开的跟踪标志将告诉您检查点在幕后做了什么。

  • 3502:在检查点开始和完成时写入错误日志
  • 3504:写入错误日志有关写入磁盘的内容的信息
  • 3605:允许跟踪打印到错误日志

有关上述内容的更多详细信息,请参阅 Paul Randall 的博客文章。此外,优化性能的微调有一个很好的信息 - 特别是在搜索尖峰部分。

一些真正的内部阅读:

  1. 工作原理:FlushCache 消息何时添加到 SQL Server 错误日志中?
  2. 工作原理:SQL Server 检查点 (FlushCache) 未完成的 I/O 目标
  3. SQL Server 检查点问题

与其直接关注检查点行为,我建议您查看 DMV 和 Perfmon(与磁盘相关)-

  1. sys.dm_io_virtual_file_stats
  2. 物理磁盘对象:平均。磁盘队列长度
  3. 平均 磁盘秒/读
  4. 平均 磁盘秒/写
  5. 物理磁盘:% 磁盘时间
  6. 平均 磁盘读取数/秒
  7. 平均 磁盘写入/秒

您可以参考调查 I/O 瓶颈