私はこのクエリを ブログ投稿 から取得しました:
SELECT object_name, counter_name, cntr_value
FROM sys.dm_os_performance_counters
WHERE [object_name] LIKE '%Buffer Manager%'
AND [counter_name] = 'Buffer cache hit ratio'
投稿はそれが私にキャッシュへのヒットのパーセンテージを与えると言った。値が0〜100であることを示しているようです(結果は87でした)。
しかし、実行すると、非常に多くの数が得られます。次に例を示します。
object_name counter_name cntr_value
SQLServer:Buffer Manager Buffer cache hit ratio 9990
これは99.90%を意味しますか?
そうでない場合、それはどういう意味ですか?そして、どうすれば真の価値を得ることができますか?
注:257のように低い値と352363のように高い値を取得しています
該当する場合は、他のいくつかのサーバー統計を以下に示します。
紛らわしいですよね?
まあ、実際に比率を取得するには、Buffer cache hit ratio base
に加えてBuffer cache hit ratio
を使用して自分で行う必要がありますBuffer cache hit ratio / Buffer cache hit ratio base
から結果を取得する。
以下のクエリを試してみてください( Less Than Dot から)。これにより、探している%が得られます。
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'
SQLサーバーの既定のインスタンスがなく、名前付きインスタンスがある場合は、次のようにクエリを変更する必要があります。
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 LIKE '%:Buffer Manager%') b ON a.OBJECT_NAME = b.OBJECT_NAME
WHERE a.counter_name = 'Buffer cache hit ratio'
AND a.OBJECT_NAME LIKE '%:Buffer Manager%'