我发现9990 的“缓冲区缓存命中率”是什么意思?(我从一个错误的博客中得到了 9000+ 的结果)并使用LowlyDBA/Denis Gobo 的解决方案与 Denis Gobo的PLE 检查器相结合,获得了 100% 的缓冲区缓存命中率和 103 的 PLE,这是怎么回事可能的?
100% 的缓冲区缓存命中率表示需要在内存中找到 100% 的页面,但 PLE 表示页面仅在内存中停留几分钟。
也许有一些 PLE 值,低于该值的缓冲区 chache 命中率不会增加价值?
SELECT (a.cntr_value * 1.0 / b.cntr_value) * 100.0 as BufferCacheHitRatio
FROM sys.dm_os_performance_counters a
JOIN (SELECT cntr_value, OBJECT_NAME
FROM sys.dm_os_performance_counters
WHERE counter_name = 'Buffer cache hit ratio base'
AND OBJECT_NAME = 'SQLServer:Buffer Manager') b ON a.OBJECT_NAME = b.OBJECT_NAME
WHERE a.counter_name = 'Buffer cache hit ratio'
AND a.OBJECT_NAME = 'SQLServer:Buffer Manager'
SELECT *
FROM sys.dm_os_performance_counters
WHERE counter_name = 'Page life expectancy'
AND OBJECT_NAME = 'SQLServer:Buffer Manager'
我为什么关心:
我的实例是 SQL 2017 CU13,重型 OLTP,SQL 实例有 4GB RAM(单实例,服务器上 6GB RAM)。
我知道有超过 1.5GB 的 RAM 专用于 Plan Cache,根据这里 4GB RAM 的一些来源,Plan Cache 应该可以使用 3GB(在几个地方找到了类似的细节,但都是旧的,没有一个是微软)
Select ( SUM(size_in_bytes)) /1024 /1024 AS size_in_MB FROM sys.dm_exec_cached_plans
我还没有使用任何xevents 来衡量计划驱逐,只是想了解一些事情。
Buffer cache hit ratio
并且Buffer cache hit ratio base
是非常小的时间片的测量值。您只是在最近的读取命中缓冲区缓存时运行查询。为了证明,只需查看一段时间内的原始值 - 它们会上升和下降。
我建议您查看其他指标(也许
sys.dm_io_virtual_file_stats
?),看看您正在驾驶哪种 IO。