Database
 sql >> Database >  >> RDS >> Database

I contatori Zombie PerfMon che non muoiono mai!

Una delle cose che è allo stesso tempo grandiosa e orribile di Internet è che, una volta che qualcosa viene pubblicato nell'etere, praticamente non scompare mai. (Un giorno i politici se ne renderanno conto. Possiamo facilmente verificarne la coerenza.) A causa della longevità dei contenuti pubblicati su Internet, molti argomenti di ottimizzazione delle prestazioni diventano "zombi". Gli spariamo a morte, ma continuano a tornare!

In altre parole, quei vecchi consigli erano una procedura consigliata suggerita molto tempo fa, per una versione specifica di SQL Server, ma ora è inappropriata per la versione più recente. Non è raro per me, quando parlo a una conferenza, incontrare qualcuno che si aggrappa ancora a impostazioni e tecniche che non erano una buona pratica dai tempi di SQL Server 2000. La Guida alle operazioni di SQL Server 2000 su capacità/archiviazione contiene molti " best practice" che erano molto specifici per la versione e che oggi non si applicano più.

Quindi ecco un esempio. Il % Disk Time e Disk Queue Length I contatori PerfMon sono stati fortemente consigliati come indicatori chiave delle prestazioni per le prestazioni di I/O. SQL Server genera molte operazioni di I/O sui dischi utilizzando la dispersione/raccolta per massimizzare l'utilizzo del sottosistema di I/O basato su disco. Questo approccio porta a brevi raffiche di code lunghe durante i checkpoint e i read-ahead per un'istanza di SQL ServerSQL Server. A volte il carico di lavoro del server è tale che il tuo disco non riesce a tenere il passo con l'I/O spinto su di esso e, quando ciò accade, vedrai anche lunghe code. Lo scenario a scoppio breve non è un problema. Lo scenario di allungamento della lunghezza della coda di solito è un problema. Quindi è una buona pratica?

In una parola, non tanto.

Questi contatori possono ancora essere utili su un'istanza di SQL Server che ha un solo disco rigido (anche se è eccessivamente raro di questi tempi). Perché?

Il contatore PerfMon % Disk Time è una metrica falsa delle prestazioni per diversi motivi. Non tiene conto delle richieste di I/O asincrone. Non può dire quale possa essere il reale profilo di prestazioni per un set RAID sottostante, poiché contengono più unità disco. Il contatore PerfMon Disk Queue Length è anche per lo più inutile, tranne che su SQL Server con un singolo disco fisico, perché la cache del controller del disco rigido offusca quante operazioni di I/O sono effettivamente in attesa sulla coda o meno. In effetti, alcuni dischi rigidi hanno anche minuscole cache di scrittura, il che confonde ulteriormente l'acqua se l'I/O è veramente in coda, in una cache da qualche parte tra il sistema operativo e il disco, o se è finalmente arrivato fino in fondo al CMOS sul disco.

Migliori contatori I/O PerfMon

Invece di usare quei contatori PerfMon, usa Avg Disk Reads/sec , Avg Disk Writes/sec e Avg Disk Transfers/sec per monitorare le prestazioni dei sottosistemi del disco. Questi contatori tengono traccia del numero medio di I/O di lettura, I/O di scrittura e I/O di lettura e scrittura combinati che si sono verificati nell'ultimo secondo. Occasionalmente, mi piace tenere traccia delle stesse metriche in base al volume di dati piuttosto che alla velocità delle operazioni di I/O. Quindi, per ottenere quei dati, potresti provare questi contatori PerfMon specifici per volume: Avg Disk Transfer Bytes/sec , Avg Disk Read Bytes/sec e Avg Disk Write Bytes/sec .

Per le prestazioni di I/O di SQL Server, utilizzare le viste a gestione dinamica (DMV)

E a meno che tu non abbia vissuto in una caverna, dovresti assicurarti di usare le viste a gestione dinamica (DMV) di SQL Server per controllare le prestazioni di I/O per le versioni recenti di SQL Server. Alcuni dei miei DMV preferiti per l'I/O includono:

  • sys.dm_os_wait_stats
  • sys.dm_os_waiting_tasks
  • sys.dm_os_performance_counters
  • sys.dm_io_virtual_file_stats
  • sys.dm_io_pending_io_requests
  • sys.dm_db_index_operational_stats
  • sys.dm_db_index_usage_stats

Quindi, come stai monitorando le metriche delle prestazioni di I/O? Quali stai usando?

Non vedo l'ora di avere tue notizie!

Divertiti,
-Kev
–Seguimi su Twitter!