![SQL Server 2005 中无法解释的 CPU 和磁盘活动激增](https://linux22.com/image/565451/SQL%20Server%202005%20%E4%B8%AD%E6%97%A0%E6%B3%95%E8%A7%A3%E9%87%8A%E7%9A%84%20CPU%20%E5%92%8C%E7%A3%81%E7%9B%98%E6%B4%BB%E5%8A%A8%E6%BF%80%E5%A2%9E.png)
在我提出问题之前,请允许我描述一下情况。我有一台数据库服务器,上面有许多表。两个最大的表各包含超过 80 万行。大多数行的大小都小于 10k,但大约每 100 行中就有 1 行大于 1 MB 但小于 4 MB。因此,在 160 万行中,大约有 16000 行是这些大行。它们之所以这么大,是因为我们在数据库中存储了 zip 文件二进制 blob,但我离题了。
我们有一个在后台持续运行的服务,从这两个表中各修剪 10 行。在上面的性能监视器图中,这些是小凸起(红色表示 CPU,绿色表示磁盘队列)。每分钟我们都会得到一次 CPU 活动的大幅飙升,同时磁盘活动的激增,如屏幕截图中的红色箭头所示。
我运行了 SQL Server 剖析器,没有任何东西可以解释这个峰值。我怀疑这个峰值是在一个大行被删除时发生的。我已将剖析器的结果输入到调优向导中,但没有得到任何优化建议(即我假设这意味着我的数据库已针对当前工作负载正确编制索引)。
我并不太担心,因为服务器在所有情况下都表现良好,即使在高峰负载下也是如此。但是,我想知道我还能做些什么来找出导致这种峰值的原因?
更新:
经过进一步调查,CPU 和磁盘使用率激增是由于 SQL Server 的自动检查点造成的。数据库使用简单恢复模型,这会在每个检查点截断日志文件。我们可以在下图中看到这一点。如上所述微软,当事务日志达到 70% 满时将出现检查点,并且我们正在使用简单恢复模型。
这很有启发,我确实学到了一些东西!
答案1
检查点,写出已更改的数据库页面。在许多情况下,这种情况并不总是发生。
https://stackoverflow.com/questions/865659/sql-server-checkpoints