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

Ottimizzazione di TempDB:evitare colli di bottiglia e problemi di prestazioni

Come suggerisce il nome, TempDB è un'area di lavoro temporanea richiesta da SQL Server per creare e conservare oggetti intermedi e temporanei.

TempDB è un ingranaggio significativo nell'apparato generale di SQL Server e come spazio di lavoro temporaneo:i dati che contiene sono di natura transitoria. In altre parole, la tua istanza di SQL Server ricrea TempDB ogni volta che si riavvia, dando a se stessa un blocco per appunti pulito con cui può funzionare.

  • Oggetti temporanei attivati ​​dalle richieste degli utenti
  • oggetti richiesti dai processi interni del sistema
  • informazioni sulla versione delle righe

Inutile dire che se TempDB non è configurato in modo ottimale, può causare colli di bottiglia operativi e un degrado delle prestazioni. Potrebbe farti chiedere perché le tue query con join complessi e operazioni di ordinamento non producono risultati così velocemente come previsto.

Non esiste un modo semplice per generalizzare le migliori pratiche per l'ottimizzazione di TempDB, gli scenari sono troppo diversi e ciò che funziona in una determinata situazione potrebbe non funzionare in un'altra. Anche se il tuo database è entrato in produzione, è sempre una buona idea continuare a rivedere la configurazione del tuo TempDB per assicurarti che sia configurato come dovrebbe essere.

Uno dei problemi più seri nelle prestazioni del database è la contesa TempDB. Ciò si verifica quando più risorse richiedono TempDB, ma è presente un solo file di dati TempDB a cui accedere.

La contesa di TempDB può causare seri problemi di prestazioni ed è spesso fraintesa come un normale blocco a causa dei blocchi del database. Molte volte, è in realtà una contesa bloccata nelle pagine di allocazione da processi simultanei. Ciò può portare a colli di bottiglia poiché ogni processo attende il proprio turno. Poiché il turno non arriva abbastanza velocemente, il timeout delle connessioni sottostanti e i processi devono essere deallocati.

Che cosa ottieni? Un ingorgo virtuale di processi bloccati.

Come si risolve la contesa TempDB e si ottimizzano le prestazioni di SQL Server? Diamo un'occhiata alle basi e partiamo da lì.

Numero di file di dati:quanti dovrei avere?

Quando configuri SQL Server e mantieni la configurazione predefinita, hai un solo file di dati per TempDB. Non accontentarti di questa configurazione.

Una delle regole pratiche spesso propagandate è un singolo file di dati per core. Ma procedi con cautela in questo caso, se il tuo server ha 12 core, non utilizzare 12 file di dati TempDB a meno che non sia giustificato dall'applicazione e dai requisiti di carico.

L'opzione migliore, date le configurazioni hardware odierne, è iniziare con 8 file di dati primari di dimensioni uguali e vedere se il problema della contesa è stato risolto. Procedi verso l'alto e aggiungi altri quattro file se necessario. La procedura guidata di installazione e configurazione di SQL Server 2016 ha una funzionalità incorporata che garantisce di disporre di un numero sufficiente di file di dati TempDB rilevando il numero di core della CPU e creando automaticamente il numero appropriato di file di dati TempDB.

Le dimensioni contano:come devono essere configurate le dimensioni dei file di dati?

Ora che abbiamo coperto il numero di file, diamo un'occhiata alle dimensioni consigliate di ciascun file. La dimensione predefinita è 8 MB, che fornisce a SQL Server un totale di 64 MB di spazio TempDB, insufficiente per la maggior parte degli ambienti di produzione. Anche mantenere la crescita automatica è un'opzione, ma SQL Server dovrà mettere in pausa e allocare più spazio su disco per i file TempDB quando necessario, aggiungendo un sovraccarico significativo a SQL Server durante un'esecuzione di produzione.

La pratica consigliata consiste nel mantenere i file e lo spazio iniziale richiesto per ciascun file all'incirca dall'80 al 90% del volume su cui è archiviato TempDB. Il 10-20% di spazio su disco viene lasciato per la memoria virtuale basata su sistema operativo.

In altre parole, predimensionare i file di dati durante l'installazione o modificare le dimensioni dei file nell'ambiente di produzione. Ciò garantirà che sia allocato spazio su disco sufficiente per TempDB. A questo punto è sempre consigliabile mantenere attiva l'opzione Crescita automatica, ma idealmente, cercare di assicurarsi che SQL Server non debba allocare spazio su disco aggiuntivo troppo spesso.

Un fatto interessante, prima di SQL Server 2017, non era possibile allocare più di 1 GB per file di dati TempDB al momento dell'installazione. Con l'ultima versione, è possibile allocare fino a 256 GB per un file di dati TempDB durante l'installazione.

Il che ci porta alla prossima domanda:

Dove conservo i file di dati TempDB?

Prima di SQL Server 2012, nel caso di un ambiente in cluster, TempDB doveva trovarsi su dischi condivisi tra l'ambiente in cluster, come una SAN (Storage Area Network). A partire da SQL Server 2012, è possibile mantenere i file di dati TempDB su un'archiviazione locale basata su SSD. Ciò riduce quello che sarebbe stato molto traffico tra la SAN condivisa e l'istanza di SQL Server.

Nella maggior parte dei casi, l'opzione migliore per la posizione TempDB è un SSD locale dedicato. Se ciò non è possibile, mantenerlo su un volume dedicato proprio, con spazio su disco sufficiente preallocato dovrebbe risolvere probabili problemi di prestazioni. Assicurati di monitorare costantemente lo stato del disco in modo che le letture e le scritture del disco vengano eseguite a un livello ottimale.

Idealmente, il supporto dovrebbe essere il più veloce possibile data la configurazione del server, i requisiti dell'applicazione e, ultimo ma non meno importante, il budget allocato.

Ora che abbiamo dato un'occhiata alle nozioni di base, diamo un'occhiata alle aggiunte pertinenti e benvenute a varie aggiunte di SQL Server dopo SQL Server 2012.

Cos'altro c'è di nuovo?

SQL Server 2016

Scheda dedicata durante la configurazione

  • Con questa edizione, SQL Server dispone di una scheda dedicata per la configurazione di TempDB durante il flusso di lavoro di installazione
  • La procedura guidata di installazione e configurazione di SQL Server 2016 ha una funzionalità incorporata che garantisce la disponibilità di un numero sufficiente di file di dati TempDB al momento dell'installazione di SQL Server. Rileva il numero di core della CPU e crea automaticamente file di dati TempDB, soggetti a un massimo di 8. È possibile aumentare questo numero dopo aver configurato SQL Server.

Inizializzazione file istantanea

  • SQL Server deve allocare spazio su disco per TempDB durante l'installazione iniziale e quando la dimensione del file aumenta in un'esecuzione di produzione. Questa assegnazione può essere possibile in due modi. Il primo modo è inizializzare lo spazio su disco inutilizzato scrivendo zeri prima di allocare lo spazio. Il secondo modo consiste nell'allocare istantaneamente lo spazio file per la crescita di TempDB.
  • Nel primo metodo, SQL Server deve eseguire un'operazione intensiva del disco inizializzando ogni cluster di dischi logici. In questo metodo, i processi in esecuzione sul server che necessitano di TempDB potrebbero dover attendere, creando un collo di bottiglia.
  • Se invece scegli di allocare istantaneamente lo spazio per i file, il server SQL alloca istantaneamente lo spazio per la crescita automatica senza inizializzare lo spazio su disco. Ciò riduce l'I/o del disco ogni volta che è richiesta una crescita automatica e garantisce un throughput e prestazioni migliori. Sebbene fosse possibile attivare IFI nelle precedenti edizioni, è stato un processo macchinoso. In questa edizione di SQL Server, è più semplice configurare IFI al momento della configurazione del server.
  • I flag di traccia 1117 e 1118 sono ridondanti

SQL Server 2017

  • Prima di SQL Server 2017, non era possibile allocare più di 1 GB per file di dati TempDB al momento dell'installazione, il che significa che le dimensioni del file TempDB dovevano essere aumentate al termine dell'installazione. Con questa versione, è possibile allocare fino a 256 GB per un file di dati TempDB durante l'installazione.

Monitoraggio TempDB

Tenere traccia di TempDB può essere difficile. Come puoi sapere se hai una contesa su TempDB? Cosa viene allocato agli oggetti utente, all'archivio versioni o agli oggetti interni? Come sono questi trend nel tempo? Quali sessioni consumano TempDB e in che misura? Spotlight Cloud semplifica la risposta a queste domande. Monitora tutti gli aspetti delle prestazioni del tuo server SQL 24 ore su 24, 7 giorni su 7 e fornisce flussi di lavoro analitici approfonditi per affrontare qualsiasi problema di prestazioni. Tieni traccia del tuo TempDB nel tempo e ricevi avvisi automatizzati di esperti sulla configurazione.


In quanto soluzione SaaS, Spotlight Cloud è facile da configurare e configurare. Conserva fino a un anno di dati sulle prestazioni fornendo informazioni di ottimizzazione imbattibili. I problemi di prestazioni possono essere risolti in pochi secondi con l'analisi della causa principale. Non perdere altro tempo a scavare tra script complessi:inizia subito la tua prova di 30 giorni. Il monitoraggio delle prestazioni di prim'ordine di SQL Server inizia ora.