Che cosa significa un "rapporto di riscontro cache buffer" di 9990?


12

Ho ricevuto questa domanda da un post sul 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'

Il post diceva che mi avrebbe dato una percentuale di hit nella cache. Sembrava indicare che sarebbe stato un valore di 0-100 (ha mostrato un risultato di 87).

Ma quando lo eseguo sto ottenendo numeri molto alti. Ecco un esempio:

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

Questo significa 99,90%?

In caso contrario, cosa significa? E come posso ottenere il valore reale?

NOTA: ho ottenuto valori compresi tra 257 e 352363

Nel caso sia rilevante, ecco alcune altre statistiche del server:

  • Aspettativa di vita della pagina: 145
  • Letture pagina / sec: 1.380.009.009

1
Siamo spiacenti, ma il post sul blog è errato. :-( Denis Gobo ha ragione ...
Aaron Bertrand

Risposte:


18

Confuso, vero?

Bene, per ottenere effettivamente il rapporto, dovrai farlo tu stesso usando l' Buffer cache hit ratio baseaggiunta oltre a Buffer cache hit ratioprendendo il risultato da Buffer cache hit ratio / Buffer cache hit ratio base.

Prova la query seguente (da Less Than Dot ), che dovrebbe darti la% che stai cercando:

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'

5
Dovresti dare credito a Denis Gobo ...
Aaron Bertrand

@Aaron Uno di quei giorni - aggiunta attribuzione
LowlyDBA

Sono confuso dai risultati che ottengo, vedere correlati Come si può avere un rapporto di
James Jenkins,

0

Se non si dispone di un'istanza predefinita di SQL Server, ma di un'istanza denominata, è necessario modificare la query in questo modo:

  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%'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.