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!