Per massimizzare le prestazioni del DB, quali comandi devono essere eseguiti dopo aver caricato grandi quantità di dati in SQL Server 2008 tramite SSIS


11

Ho scritto un pacchetto SSIS per caricare i dati di test in un database vuoto. Alcune tabelle sono molto grandi (~ 700 milioni di righe). Una volta completato il pacchetto SSIS, ci sono dei comandi che dovrei eseguire (come apprendista DBA!) Per massimizzare le prestazioni del database?

Ad esempio, l'ho eseguito EXEC sp_updatestatsma ha riferito che nessun indice ha richiesto l'aggiornamento.

Esiste un elenco di cose da fare una volta caricate grandi quantità di dati o SQL Server 2008 si occupa di tutto ciò per te?

Risposte:


8

Se stai caricando su un database vuoto, potresti / dovresti prendere delle misure per evitare di richiedere ulteriori passaggi di manutenzione dopo il caricamento. La frammentazione è il nemico, questo è ciò che stai cercando di evitare.

  • Rilasciare tutti gli indici NC prima di caricare.
  • Dopo il caricamento, aggiungere gli indici NC per ogni tabella in sequenza, ovvero non aggiungere un indice a TableA, quindi a TableB, quindi a TableA. Ciò non ha alcun effetto sulla frammentazione ma può migliorare il tempo impiegato per aggiungere gli indici su set di dati molto grandi (riduce il churn del pool di buffer).
  • Se è possibile inserire dati in una tabella in ordine di indice cluster, lasciare in posizione l'indice cluster. Se non è possibile, scaricare i dati in un heap e ricostruirli in un carico post indice cluster.

Piuttosto che copiare e incollare, ti indicherò l'elenco molto completo di riferimenti per l'ottimizzazione ETL @Marian messo insieme in una risposta a una domanda che ho posto su BCP . Molti di questi saranno ugualmente applicabili al tuo scenario.


2
Interessante, sul link ai video di SQLCAT e SSIS la loro scoperta non ha mai lasciato cadere un indice NC. Immagino che questo sia un altro caso di "dipende"
billinkc,

2
@billinkc non era per carichi incrementali, piuttosto che per il database vuoto anche questa domanda fa riferimento? In ogni caso, i test SQLCAT tendono a coinvolgere una classe di hardware raramente vista nelle organizzazioni tipiche.
Mark Storey-Smith,

5

Dipende da quanta finestra hai, ma generalmente l'aggiornamento delle statistiche e la ricostruzione / riorganizzazione degli indici è un buon passo da compiere. A parte questo, non dovrebbe esserci nient'altro che tu debba fare davvero.

Le statistiche indicano a Query Optimizer quante righe sono probabilmente interessate da un'operazione e che a sua volta indica a SQL quale approccio adottare per eseguire le query. L'inserimento di dati può distorcere la distribuzione e se non hai inserito abbastanza righe per innescare un aggiornamento delle statistiche in modalità di aggiornamento automatico, quella manuale dovrebbe aiutarti. Se hai la finestra, dico di mantenere la parte di aggiornamento delle statistiche.

Gli indici possono essere frammentati quando vengono aggiunti i dati. La ricostruzione o la riorganizzazione aiuta a ridurre ciò, il che può portare a prestazioni migliori quando si accede effettivamente ai dati.


4
Sulla falsariga degli indici, in uno dei video SSIS di SQLCAT , suggeriscono anche una regola empirica che se la crescita dei dati è> 100% e c'è un singolo NCI, rilasciarli e ricrearli. Se supera il 10% e ci sono 2+ NCI, rilasciare e ricreare produrrà prestazioni migliori.
Billinkc,

2
Solo per chiarire il commento di Bill - Penso che stia dicendo che il suggerimento è che i tempi di drop-create significano Drop Index, Carica i tuoi dati, Quindi ricrea il tuo indice .. Invece di lasciare lì gli indici durante il caricamento e ricostruire dopo. Penso di sì comunque :-) e sì, ottimo punto, ho fatto +1 su quel commento.
Mike Walsh,
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.