
在提出我的问题之前,请允许我描述一下情况。 我有一个数据库服务器,有许多表。 其中两个最大的桌子每个都有80多万行。 大多数行的大小不到10k,尽pipe100行中的大约1行将大于1MB,但是小于4MB。 所以在160万行中,大约有16000行是这些大行。 他们之所以这么大是因为我们在数据库中存储zip文件的二进制blob,但是我离题了。
我们有一个在后台不断运行的服务,从这两个表中分别修改10行。 在上面的性能监视器图中,这些是小颠簸(红色表示CPU,绿色表示磁盘队列)。 有一次,我们得到了CPU活动的大量激增,以及磁盘活动的跳跃,由截图中的红色箭头表示。
我已经运行了SQL Server分析器,并没有任何东西可以作为解释这个高峰的候选者。 我的怀疑是,这个尖峰发生时,其中一个大行被删除。 我已经将分析器的结果input到调优向导中,并且没有得到优化build议(即,我假设这意味着我的数据库正确地为我当前的工作负载编制索引)。
即使在高峰负载的情况下,服务器在任何情况下都处于良好状态,我并不担心。 不过,我想知道是否还有其他事情可以做,以找出是什么原因造成这个高峰?
更新:
在进一步调查之后,CPU和磁盘使用率峰值下降到SQL Server的自动检查点。 数据库使用简单的恢复模式 ,并在每个检查点截断日志文件。 我们可以在下面的图表中看到这一点。
正如在MSDN上所描述的那样,当事务日志变满了70%,并且我们正在使用简单的恢复模式时,检查点就会发生。
这一直是启发,我已经明白了一些东西!
检查点,写出已更改的数据库页面。 这在许多情况下不会一直发生。
https://stackoverflow.com/questions/865659/sql-server-checkpoints