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

Geo*_*ge2 2 sql sql-server sql-server-2008

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

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

提前致谢,乔治

Mit*_*eat 8

看看 BOL: SQL Server, Buffer Manager Object

您应该首先查看的两个领域是:

  • 过程缓存是 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 内存管理器中的计数器 Memory Grants Pending。小型 OLTP 事务不应需要大量内存授权。

  • SQL 缓存命中率突然下降或始终如一的低命中率。OLTP 应用程序(例如小事务)应该具有高缓存命中率。由于 OLTP 事务很小,因此不应 (1) SQL 缓存命中率大幅下降或 (2) 缓存命中率始终低于 90%。丢弃或低缓存命中可能表示内存压力或缺少索引。