Quando aggiornare le statistiche?


42

Ho ereditato un piano di manutenzione che procede come segue:

  • Pulisci vecchi dati
  • Verifica l'integrità del DB
  • Esegue backup del database e del registro delle transazioni
  • Riorganizza i nostri indici
  • Statistiche aggiornamenti
  • Elimina i vecchi backup e file del piano di manutenzione

Del piano di manutenzione di 23 minuti, l'aggiornamento delle statistiche impiega 13 minuti sbalorditivi. Durante questo periodo di 13 minuti, l'accesso al database viene bloccato (o almeno, la replica da questo DB agli altri viene messa in pausa).

La mia domanda è:

Quando dovremmo aggiornare le statistiche e perché?

Questo sembra il tipo di cosa che dovremmo fare meno frequentemente di ogni giorno. Sto cercando di farci uscire dalla mentalità "solo perché" di fare manutenzione non necessaria.


2
Con quale frequenza / quante righe vengono inserite / aggiornate / eliminate? Per me questo è il fattore decisivo.
JNK,

@JNK Inseriamo ~ 70.000 righe al giorno nell'intero DB. Aggiornamento ~ 100 righe al mese.
Onion-Knight,

1 - Questo è più rilevante se sappiamo da TABELLA quante righe e 2 -come percentuale. 70k righe al giorno in una tabella di 1m sono molto diverse rispetto a una tabella di 500m
JNK

Consiglierei di usare qualcosa come ola.hallengren.com/… questa soluzione ricostruisce / riorganizza e aggiorna solo ciò che è necessario in questo modo potresti accorciare il tempo richiesto dal tuo piano di manutenzione e anche risparmiare un sacco di spazio nel registro ..
Peter

Risposte:


28

Se non si dispone della finestra di manutenzione, l'aggiornamento delle statistiche quotidiane è probabilmente un po 'eccessivo. Soprattutto se hai attivato Auto Update Statistics per il database. Nel tuo post originale, hai affermato che gli utenti vedono una riduzione delle prestazioni dovuta a questo piano di manutenzione. Non c'è altro tempo per eseguire questo piano di manutenzione? Nessun'altra finestra? Vedo che il tuo piano comprende la riorganizzazione degli indici, quando stai ricostruendo gli indici? Quando si verifica tale operazione, le statistiche vengono aggiornate automaticamente (a condizione che non sia disattivato per l'indice).

La frequenza esatta con cui dovresti aggiornare le statistiche dipende molto dalla quantità di modifica dei dati che i tuoi indici e dati stanno ricevendo . Se non v'è molto poco modifica ( INSERT, UPDATE, DELETE) per i dati, allora si potrebbe avere un programma più frequente per il lavoro statistiche di aggiornamento.

Un modo per scoprire se le tue statistiche sono obsolete è quello di esaminare i piani di esecuzione e se le righe stimate differiscono notevolmente dalle righe effettive restituite, questa è una buona indicazione che l'intervallo deve essere aumentato. Nel tuo caso, stai andando dall'altra parte e un po 'di prova potrebbe essere in ordine per te. Aggiorna le statistiche settimanalmente e se stai iniziando a vedere i segnali rivelatori di statistiche non aggiornate, vai da lì.

Se si utilizzano le statistiche di aggiornamento automatico per il proprio database, consultare questo riferimento per la soglia di aggiornamento delle statistiche.


Ricostruiamo gli indici una volta alla settimana.
Onion-Knight,

5
@ Onion-Knight Quindi, quando ricostruisci gli indici, aggiorni anche le statistiche una volta alla settimana. Ciò potrebbe essere sufficiente se si sta eseguendo una ricostruzione dell'indice generale nel database.
Thomas Stringer,

25

Quando aggiornare le statistiche?

se e solo se la funzione delle statistiche di aggiornamento automatico non è abbastanza adatta alle tue esigenze. intendo se le statistiche di creazione automatica e aggiornamento automatico sono attive e si sta ottenendo un piano di query errato perché le statistiche non sono accurate o aggiornate, potrebbe essere una buona idea avere il controllo sulla creazione e l'aggiornamento delle statistiche. ma se stai bene con le prestazioni del tuo server sql e i tempi di esecuzione della query.

quindi suggerisco di interrompere il comando Statistiche aggiornamenti dai piani di manutenzione

l'aggiornamento delle statistiche è importante e utile 1. consente a Query Optimizer di SQL Server di produrre coerentemente buoni piani di query, mantenendo bassi i costi di sviluppo e amministrazione 2. Le statistiche sono utilizzate da Query Optimizer per stimare la selettività delle espressioni e quindi la dimensione dell'intermedio e risultati della query finale. 3. Buone statistiche consentono all'ottimizzatore di valutare accuratamente il costo di diversi piani di query e quindi scegliere un piano di alta qualità


Se si desidera aggiornare manualmente le statistiche, è necessario innanzitutto sapere quando le statistiche vengono aggiornate automaticamente

Se lo Strumento per ottimizzare le query di SQL Server richiede statistiche per una determinata colonna in una tabella che ha subito una sostanziale attività di aggiornamento dall'ultima volta che le statistiche sono state create o aggiornate, SQL Server aggiorna automaticamente le statistiche campionando i valori della colonna (usando le statistiche di aggiornamento automatico) . L'aggiornamento automatico delle statistiche viene attivato dall'ottimizzazione della query o dall'esecuzione di un piano compilato e coinvolge solo un sottoinsieme delle colonne a cui fa riferimento la query. Le statistiche vengono aggiornate prima della compilazione della query se AUTO_UPDATE_STATISTCS_ASYNC è OFF

qui ci sono dei bei articoli che parlano di quando le statistiche di aggiornamento sono attivate in SQL Server

  1. dalla sezione 13 di simple-talk Quando viene attivato l'aggiornamento automatico alle statistiche?
  2. support.microsoft Sezione: Automatats determinazione
  3. Sezione msdn.microsoft : Gestione delle statistiche in SQL Server 2008

dopo aver saputo quando vengono attivate le statistiche, ti aiuterà a decidere quando aggiornare le statistiche manualmente

per saperne di più su Statistica e sui suoi effetti sulle prestazioni, consiglio BrentOzar e Kimberly in sqlskills di ottimi blog e blogger.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.