Abbiamo un database OLTP attivo da 40 GB su SQL Server 2014 SP1. Le query risultano lente con le attese di IO_Completion, la lunghezza della coda del disco che sale a 900 e SQL Server smette di rispondere. Cosa abbiamo provato:
Riavvia l'istanza e con in un minuto inizia a comportarsi allo stesso modo.
Dopo il secondo riavvio, abbiamo modificato le dimensioni iniziali di ciascun file di dati tempdb (sono stati creati 16 file di dati) e questo inizia a funzionare correttamente.
Nota: stiamo usando variabili di tabella per set di risultati intermedi. Questi set di risultati sono molto piccoli.
È successo due volte in un mese. Ogni volta che aggiungo manualmente un po 'di spazio ai file di dati, allora inizia a funzionare normalmente. La cosa più interessante è che la stessa configurazione (stesso hardware, stessa cartella e configurazione dei file, stesso carico di lavoro) che abbiamo su SQL Server 2008 R2 e SQL Server 2012 funziona bene.
Aiutateci gentilmente a trovare una soluzione permanente.
La dimensione iniziale di tutti i file di dati è uguale a 1000 MB, la corrente è di 1500 MB ciascuno. Tutti sono identici La crescita automatica è di 100 MB per ciascuno. Prima di questo stavamo affrontando la contesa di pagine PFS e GAM e siamo aumentati a 16 e il problema è stato risolto. Entrambi i flag di traccia 1117 e 1118 sono abilitati. 24 core su 2 nodi NUMA. Tutti i file di dati si trovano sullo stesso volume. Disco semplice, nessuna SAN.
L'istanza si trova su una macchina fisica. Le query con variabili di tabella e le query con join hash generano più comunemente attese IO_Completion.
La risposta dettagliata di wBob ci ha spinto a cercare più in dettaglio. Come l'abbiamo perso prima:
La crescita automatica del file 'templog' nel database 'tempdb' è stata annullata dall'utente o scaduta dopo 7704 millisecondi. Utilizzare ALTER DATABASE per impostare un valore FILEGROWTH più piccolo per questo file o per impostare esplicitamente una nuova dimensione del file.
Questo è stato riscontrato nel registro quando si verifica questo tipo di problema. Stiamo spostando TempDB per separare l'unità veloce.