SELECT
CASE
WHEN counter_name = 'Page life expectancy' THEN 'Page Life Expectancy (PLE) [秒]'
ELSE 'Buffer Cache Hit Ratio [%]'
END AS [指标名称],
CASE
WHEN counter_name = 'Page life expectancy' THEN cntr_value
ELSE CAST(cntr_value * 100.0 / (SELECT cntr_value
FROM sys.dm_os_performance_counters
WHERE counter_name = 'Buffer cache hit ratio base'
AND object_name LIKE '%Buffer Manager%') AS DECIMAL(10,2))
END AS [当前数值],
CASE
WHEN counter_name = 'Page life expectancy' THEN
CASE
WHEN cntr_value < 300 THEN '🔴 严重不足 (低于300s)'
WHEN cntr_value BETWEEN 300 AND 1000 THEN '🟡 警告 (需关注)'
ELSE '🟢 健康'
END
ELSE
CASE
WHEN (cntr_value * 100.0 / (SELECT cntr_value FROM sys.dm_os_performance_counters WHERE counter_name = 'Buffer cache hit ratio base' AND object_name LIKE '%Buffer Manager%')) < 99 THEN '🟡 需关注 (低于99%)'
ELSE '🟢 健康'
END
END AS [状态评估]
FROM sys.dm_os_performance_counters
WHERE object_name LIKE '%Buffer Manager%'
AND counter_name IN ('Page life expectancy', 'Buffer cache hit ratio');
🔴 如果 PLE 很低(例如 < 300):
这说明你的 SQL Server 在内存里留不住数据。
🟡 如果 缓存命中率 低于 99%:
解读:说明有很多请求不得不去读磁盘。
注意:这个指标在现代 DBA 看来参考价值不如 PLE 大。因为如果系统刚启动,或者在跑备份/索引维护,这个值低是正常的。但如果日常业务运行中长期低于 90-95%,配合 PLE 低,那绝对是内存瓶颈。