Que signifie un «taux de réussite du cache du tampon» de 9990?

12

J'ai reçu cette requête d'un article de blog :

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'

Le message a déclaré que cela me donnerait un pourcentage de visites dans le cache. Il semblait indiquer que ce serait une valeur de 0 à 100 (il a donné un résultat de 87).

Mais quand je le lance, j'obtiens des chiffres très élevés. Voici un exemple:

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

Est-ce à dire 99,90%?

Sinon, qu'est-ce que cela signifie? Et comment puis-je obtenir la valeur réelle?

REMARQUE: j'ai obtenu des valeurs aussi basses que 257 et aussi élevées que 352363

Dans le cas où cela est pertinent, voici quelques autres statistiques de serveur:

  • Espérance de vie de la page: 145
  • Lectures de la page / sec: 1,380,009,009
Vaccano
la source
1
Désolé, mais l'article de blog est faux. :-( Denis Gobo a raison ...
Aaron Bertrand

Réponses:

18

Déroutant, non?

Eh bien, pour obtenir réellement le rapport, vous devrez le faire vous-même en utilisant le Buffer cache hit ratio baseen plus du Buffer cache hit ratioen prenant le résultat de Buffer cache hit ratio / Buffer cache hit ratio base.

Essayez la requête ci-dessous (de Less Than Dot ), qui devrait vous donner le% que vous recherchez:

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
la source
5
Vous devriez créditer Denis Gobo ...
Aaron Bertrand
@Aaron Un de ces jours - attribution ajoutée
LowlyDBA
Je suis confus par les résultats que j'obtiens, voir les informations connexes Comment pouvez-vous avoir un taux de réussite du cache de tampon de 100% avec un PLE de 103?
James Jenkins
0

Si vous n'avez pas d'instance par défaut de SQL Server, mais une instance nommée, vous devez modifier la requête comme ceci:

  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
la source