什么 perfmon 指标可以帮助我监控 SQL Server 内存是否面临压力并导致磁盘上页面文件的使用?

var*_*ble 2 performance sql-server perfmon

SQL Server 分配有110GB 内存。

它正在消耗整个内存。

我想了解是否存在内存压力。

通常,SQL Server 将从内存中删除旧页面(当前不需要)并从磁盘中提取所需的页面。然而,当存在内存压力时——(假设内存中的所有页面都被需要并被积极使用)SQL Server将利用磁盘上的页面文件作为备用内存区域。

什么 perfmon 指标可以帮助我监控 SQL Server 内存是否面临压力(即正在使用磁盘页面文件)?

我知道内存:页面错误/秒 - 但这不仅限于 SQL 服务器内存压力。还有哪些其他性能指标可以帮助我?

Sql*_*ide 8

我的回答不会是全面的。每个数据专业人员都有自己的诊断问题的方法。

至于性能计数器,我将一起查看这些计数器。

  • SQL Server:缓冲区管理器:页面预期寿命
  • SQL Server:缓冲区管理器:缓冲区缓存命中率
  • SQL Server:缓冲区管理器:延迟写入/秒
  • SQL Server:缓冲区管理器:空闲列表停顿/秒
  • SQL Server:缓冲区管理器:可用页/秒
  • SQLServer:内存管理器:服务器总内存 (KB)
  • SQLServer:内存管理器:目标服务器内存 (KB)
  • 进程:页面错误/秒

sys.dm_os_sys_memory还暴露了一些非常有用的计数器。Total Server Memory关于和 的文章有很多相互矛盾的Target Server Memory。你要小心你所读到的内容。这篇文章有很好的解释和截图。

以下是Jonathan Kehayias 提供的关于其中一些计数器的一般指南。

查看页面预期寿命,它应该远高于大多数网上内容所说的 300 个数字。这告诉您页面在缓冲池中停留的时间,值 300 相当于 5 分钟。如果您有 120GB 的缓冲池,并且每 5 分钟搅动一次,则相当于系统持续的磁盘 I/O 速度为 409.6 MB/秒,这是必须维持的大量磁盘活动。

查看 Lazy Writes/sec,它告诉您缓冲池在 CHECKPOINT 进程之外将脏页刷新到磁盘的次数。这应该接近于零。

查看每秒可用页数和每秒可用列表停顿数。您不希望看到可用页面触底,这将导致可用列表停顿,而缓冲池必须释放页面以供使用。

查看 Memory Grants Pending,它会告诉您是否有进程正在等待工作区内存执行。

Glenn Berry制作了一个精彩的视频,其中包含他的 SQL Server 诊断内存查询。

我也喜欢Erik Darling 的sp_PressureDetector