如何查看SQL Server缓存命中率?

如何查看SQL Server缓存命中率?

我使用的是 SQL Server 2008 Enterprise。我会向 SQL Server 发出大量查询。我认为 SQL Server 本身会在内部使用一些优化,例如将数据预取到 SQL Server 内部数据缓存中或在从物理页面文件加载之前从缓存中访问频繁请求的数据,以提高性能。

有什么解决方案可以查看 SQL Server 内部缓存命中率?或者有什么最佳实践可以调整缓存以提高查询性能?

提前致谢,乔治

答案1

看一下BOL:SQL Server,缓冲区管理器对象

您首先应该关注的两个领域是:

  • 过程缓存是 SQL 存储查询计划的内存区域。

  • 缓冲区缓存是存储数据页的内存区域。

相关性能计数器:

  • 缓冲区缓存命中率
  • 页面预期寿命
  • 页面读取次数/秒

OLTP 应用程序的主要 SQL Server 2005 性能问题包含以下内容:

CPU 瓶颈如果...

  • 信号等待 > 总等待时间的 25%。请参阅 sys.dm_os_wait_stats 了解信号等待和总等待时间。信号等待测量在可运行队列中等待 CPU 所花费的时间。高信号等待表明存在 CPU 瓶颈。

  • 计划重用率 < 90%。查询计划用于执行查询。计划重用对于 OLTP 工作负载来说是理想的,因为重新创建相同的计划(用于类似或相同的事务)会浪费 CPU 资源。比较 SQL Server SQL 统计信息:批处理请求/秒与 SQL 编译/秒。按以下方式计算计划重用率:计划重用率 =(批处理请求 - SQL 编译)/批处理请求。计划重用规则的特殊例外:零成本计划将不会在 SQL 2005 SP2 中缓存(不会重用)。使用零成本计划的应用程序的计划重用率会较低,但这不是性能问题。

  • 并行等待类型 cxpacket > 总等待数的 10%。并行性会牺牲 CPU 资源来提高执行速度。鉴于 OLTP 数量巨大,并行查询通常会降低 OLTP 吞吐量,因此应避免使用。请参阅 sys.dm_os_wait_stats 了解等待统计数据。

内存瓶颈如果...

  • 平均页面预期寿命持续较低。请参阅 Perfmon 对象 SQL Server 缓冲区管理器中的平均页面预期寿命计数器(这表示页面在缓存中停留的平均秒数)。对于 OLTP,平均页面预期寿命 300 表示 5 分钟。任何低于此值都可能表示内存压力、缺少索引或缓存刷新。

  • 页面预期寿命突然大幅下降。OLTP 应用程序(例如小型事务)的页面预期寿命应保持稳定(或缓慢增加)。请参阅 Perfmon 对象 SQL Server 缓冲区管理器。

  • 待处理的内存授予。请参阅 Perfmon 对象 SQL Server 内存管理器中的“待处理的内存授予”计数器。小型 OLTP 事务不应该需要大量内存授予。

  • SQL Cache 命中率突然下降或持续偏低。OLTP 应用程序(例如小型事务)应具有较高的缓存命中率。由于 OLTP 事务较小,因此不应出现 (1) SQL Cache 命中率大幅下降或 (2) 缓存命中率持续偏低(< 90%)的情况。命中率下降或偏低可能表示内存压力或缺少索引。

相关内容