Co oznacza „Współczynnik trafień w pamięci podręcznej bufora” wynoszący 9990?

12

Otrzymałem to zapytanie z posta na blogu :

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'

W poście podano, że dałoby mi to procent trafień do pamięci podręcznej. Wydawało się, że wskazuje, że będzie to wartość 0-100 (pokazał wynik 87).

Ale kiedy go uruchamiam, otrzymuję bardzo wysokie liczby. Oto przykład:

object_name               counter_name             cntr_value  
SQLServer:Buffer Manager  Buffer cache hit ratio   9990

Czy to oznacza 99,90%?

Jeśli nie, co to znaczy? Jak mogę uzyskać prawdziwą wartość?

UWAGA: Mam wartości tak niskie jak 257 i tak wysokie jak 352363

Ponieważ jest to istotne, oto kilka innych statystyk serwera:

  • Oczekiwana długość życia strony: 145
  • Odczyty strony / s: 1 380,009,009
Vaccano
źródło
1
Przepraszamy, ale wpis na blogu jest nieprawidłowy. :-( Denis Gobo ma rację ...
Aaron Bertrand

Odpowiedzi:

18

Mylące, prawda?

Cóż, aby faktycznie uzyskać współczynnik, musisz zrobić to sam, używając Buffer cache hit ratio baseoprócz tego Buffer cache hit ratio, biorąc wynik Buffer cache hit ratio / Buffer cache hit ratio base.

Wypróbuj poniższe zapytanie (od mniej niż kropka ), które powinno dać ci%, którego szukasz:

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'
LowlyDBA
źródło
5
Powinieneś podziękować Denisowi Gobo ...
Aaron Bertrand
@Aaron Jeden z tych dni - dodano atrybucję
LowlyDBA
Jestem zdezorientowany wynikami, które otrzymuję, zobacz powiązane Jak można uzyskać współczynnik trafień bufora w pamięci podręcznej wynoszący 100% przy PLE wynoszącym 103?
James Jenkins,
0

Jeśli nie masz domyślnej instancji serwera SQL, ale nazwanej instancji, musisz zmodyfikować zapytanie w następujący sposób:

  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%'
JKO ASOL
źródło