我目前正在做一些监视 SQL Server 性能的工作。我发现以下脚本 [1] 计算“页面查找百分比” - 建议“好”值小于 100。
SELECT 1.0*cntr_value /
(SELECT 1.0*cntr_value
FROM sys.dm_os_performance_counters
WHERE counter_name = 'Batch Requests/sec')
AS [PageLookupPct]
FROM sys.dm_os_performance_counters
WHERE counter_name = 'Page lookups/sec'
现在我已经在十几个不同的服务器上运行了这个脚本——大部分是虚拟的,但也有一些物理的,主要是 2008R2 Enterprise,但有几个 2005,一些是实时的,一些是开发的,甚至是一个仅作为见证的物理 2008R2 Express 版本服务器并且当前处于休眠状态(没有使用主动故障转移设置镜像)。只有其中一台服务器的值低于 100。在大多数情况下,它一直在 1000 或至少在 100 的中间。在休眠的见证服务器上,价值是荒谬的 20,000!
这是否表明我们在这一领域存在广泛的问题,或者是否有一些无辜的解释来解释为什么这个数字在这么多不同的服务器上应该如此之高?我们在其中一些服务器上遇到了性能缓慢的问题,因此更好地了解这个数字告诉我的内容对我很有用。
[1] - http://thomaslarock.com/2012/05/are-you-using-the-right-sql-server-performance-metrics/
该指标试图衡量平均每个请求执行的逻辑 IO 操作的数量。如果你的服务器,比如说,服务于一个繁忙的网站,那么可能是一个很好的指标(也许 100 对这样的人来说太高了!)。
见证人只会有内部活动。换句话说,尽管从未看到任何实际批次,但由于各种后台进程,它将在内部接触数据文件。因此,所有内部逻辑 IO 都将被报告为由该服务器看到的少数批次引起的。
我会说 Thomas 推荐的指标有一些价值,但仅限于与 Thomas 所想的类似的工作负载。仅具有后台活动的服务器(例如您的见证人)不会报告具有此比率的任何有意义的内容。运行密集 DW 报告的服务器每小时可能只看到 1 个批处理请求,并为该请求运行数百万次页面查找。如果您的工作负载有足够频繁的批处理请求以建立重要的统计趋势,并且每个批处理请求平均执行低于 100 个页面查找,则像“必须低于 100”这样的绝对数字只有伴随着小字免责声明(如必须低于 100)才有价值。你明白了……