Ok, per chiunque sia interessato,
Abbiamo risolto il problema in Question un paio di mesi fa semplicemente installando unità SSD direttamente collegate in ciascuno di 3 server e spostando i dati DB e i file di registro dalla SAN a quelle unità SSD
Ecco un riepilogo di ciò che ho fatto per fare ricerche su questo problema (usando i consigli di tutti i post in questa domanda), prima di decidere di installare unità SSD:
1) ha iniziato a raccogliere i contatori PerfMon per le seguenti unità su tutti e 3 i server:
Disk F:
è un disco logico basato su SAN, contiene file di dati MDF
Disk I:
è un disco logico basato su SAN, contiene file di registro LDF
Disk T:
è direttamente collegato SSD, dedicato esclusivamente a tempDB
L'immagine sotto è i valori medi raccolti per un periodo di 2 settimane
Disk I: (LDF)
ha un IO così piccolo e la latenza è molto bassa, quindi il disco I: può essere ignorato
Puoi vedere che Disk T: (TempDB)
ha un IO maggiore rispetto a Disk F: (MDF)
, e ha una latenza molto migliore allo stesso tempo - 0 ms
Ovviamente qualcosa non va con il disco F: dove risiedono i file di dati, ha un'alta latenza e una coda di scrittura media del disco, nonostante un IO basso
2) Latenza controllata per singoli database tramite query da questo sito Web
https://www.brentozar.com/blitz/slow-storage-reads-writes/
Pochi database attivi sul server primario avevano una latenza di lettura di 150-250 ms e latenza di scrittura di 150-450 ms
Ciò che è interessante, i file di database master e msdb avevano una latenza di lettura fino a 90 ms, il che è sospetto data la piccola dimensione dei loro dati e un basso IO - un'altra indicazione che qualcosa non va nella SAN
3) Non c'erano tempi specifici
Durante il quale sono stati visualizzati i messaggi "SQL Server ha riscontrato occorrenze ..."
Non sono stati eseguiti ETL di manutenzione o disco pesante durante la registrazione di tali messaggi
4) Visualizzatore eventi di Windows
Non ha mostrato altre voci che suggerirebbero il problema, tranne "SQL Server ha riscontrato occorrenze ..."
5) Ho iniziato a controllare le prime 10 query
Da sp_BlitzCache (CPU, letture, ecc.) E l'ottimizzazione ove possibile
Nessuna query super IO pesante che produrrebbe tonnellate di dati e influirebbe pesantemente sull'archiviazione , sebbene l'
indicizzazione nei database sia OK, lo mantengo
6) Non abbiamo un team SAN
Abbiamo solo 1 amministratore di sistema che aiuta nel
percorso di rete di occasione verso SAN: è multipath, ciascuno dei 3 server ha 2 cavi di rete che portano agli switch e quindi a SAN, e dovrebbe essere 1 Gigabyte / sec
7) Non ci sono stati risultati CrystalDiskMark
O qualsiasi altro risultato del test di benchmark da quando i server sono stati configurati, quindi non so quali dovrebbero essere le velocità , e non è possibile fare un benchmark a questo punto per vedere quali sono le velocità attualmente, poiché avrebbe influito sulla produzione
8) Imposta la sessione Eventi estesi sull'evento checkpoint per il database in questione
La sessione XE ha aiutato a scoprire che durante i messaggi "SQL Server ha riscontrato occorrenze ...", il checkpoint si è verificato molto lentamente (fino a 90 secondi)
9) Registro errori SQL Server
Voci "Saturazione" contenute "FlushCache"
Presumibilmente visualizzate quando il tempo del checkpoint per un determinato database supera le impostazioni dell'intervallo di recupero
I dettagli hanno mostrato che la quantità di dati che il checkpoint sta tentando di svuotare è piccola e ci vuole molto tempo per completarla, e la velocità complessiva è di circa 0,25 MB / sec ... strano
10) Infine, questa immagine mostra il grafico per la risoluzione dei problemi di archiviazione:
Sembra che abbiamo semplicemente un "Problema hardware: - Collaborare con l'amministratore di sistema / il fornitore dell'hardware per correggere qualsiasi configurazione errata di SAN, driver vecchi / difettosi, controller, firmware, ecc."
In un'altra domanda "Checkpoint lento ..." Checkpoint lento e avvisi I / O di 15 secondi su memoria flash
Sean aveva un elenco molto bello di quali elementi devono essere controllati a livello hardware e software per la risoluzione dei problemi
Il nostro amministratore di sistema non ha potuto controllare tutte le cose dall'elenco, quindi abbiamo semplicemente scelto di gettare un po 'di hardware a questo problema - non era affatto costoso
Risoluzione:
Abbiamo ordinato unità SSD da 1 TB e installate direttamente nei server
Poiché disponiamo di gruppi di disponibilità, file di dati DB migrati da SAN a SSD su repliche secondarie, quindi failover e file migrati su precedente primario Ciò ha consentito un tempo di fermo totale minimo - meno di 1 minuto
Ora ogni server ha una copia locale dei dati DB e i backup completi / diff / log vengono eseguiti nella SAN menzionata.
Non più messaggi "SQL Server ha riscontrato occorrenze ..." nei registri di Visualizzatore eventi di Windows e prestazioni di backup, controlli di integrità, ricostruzioni di indici, query ecc. sono aumentate in modo significativo
Quante prestazioni in termini di latenza IO sono migliorate da quando abbiamo migrato i file DB su SSD?
Per valutare l'impatto, sono state utilizzate le registrazioni di Performance Monitor di Windows 2 settimane prima della migrazione e 4 settimane dopo la migrazione:
Di seguito è riportato anche il confronto delle statistiche di latenza a livello di DB (utilizzate le statistiche dei file virtuali acquisite di SQL Server prima e dopo la migrazione)
Sommario
Ne è valsa la pena la migrazione da SAN a SSD locali direttamente collegati. Ha avuto un grande impatto sulla latenza dello storage e è migliorato in media di oltre il 90% (in particolare le operazioni WRITE) e non abbiamo più picchi di 20-50 secondi in IO
Il passaggio all'SSD locale ha risolto non solo i problemi di prestazioni di archiviazione ma anche la sicurezza dei dati di cui ero preoccupato (se la SAN non riesce, tutti e 3 i server perdono i loro dati contemporaneamente)