最近我在 mssqltips.com 上阅读了一篇关于 SQL Server 内存瓶颈的博文。在本文中,我阅读了以下内容:
SQL Server 上的以下性能计数器:缓冲区管理器对象也可以指示内存压力:
- 大量检查点页面/秒
- 大量惰性写入/秒
- 大量页面读取/秒
- 低缓冲区缓存命中率
- 低页面预期寿命
引起我注意的是大量的“检查点页面/秒”可能表示内存压力。
我的理解是检查点将“脏”页面写入磁盘。这可以通过不同的方式触发。
- 自动(保持恢复间隔)
- 间接(维持目标恢复时间)
- 手动的
- 内部的
如此多的检查点表明系统非常繁忙(在自动和间接检查点的情况下)。
因为检查点永远不会从缓冲区高速缓存中删除页面,所以我不太明白检查点/秒的数量有多高可以指示内存压力。如果存在内存压力,我会看到大量“延迟写入/秒”。懒惰的作者从内存中删除“冷页”,为新页面腾出空间。
大量检查点页面/秒如何指示内存压力?
它不直接表示内存压力。该值本身是累积的,并不能深入了解内存压力。
在您提到的博客中,我不会依赖以下 2 个内存压力计数器。
对于 BCHR,Jonathan Kehayias 已在本博客中解释了原因。由于 Read Head 的 SQl Server 功能,如果您依赖它,它会给您不正确的解释。
SQL Server 中检查点的工作是减少SQL Server 的整体恢复时间。更频繁的检查点意味着前滚所需的事务日志记录量更少,因此恢复时间更短。所以我不会将高检查点页面/秒等同于内存瓶颈。它需要进一步分析,或者只是在一个非常繁忙的系统上可以忽略它。这只是 SQL Server 努力确保当数据库通过崩溃恢复时它会在最短时间内上线,让您满足 RTO。
如果我想查看内存压力,我会在 perfmon 计数器之后触发