Sto importando una grande quantità di dati in un database vuoto e prima di iniziare ho disabilitato tutti gli indici non cluster non univoci per vedere se potevo migliorare le prestazioni dell'importazione.
Ora voglio riattivare gli indici e mi chiedo se c'è qualcosa che posso fare per ottimizzarlo.
Ci sono> 100 tabelle e quasi 2.000 indici da ricostruire. Il database ha dimensioni di 200 GB.
La sezione chiave dello script che sto eseguendo è questa:
declare c_toggle_index cursor FORWARD_ONLY READ_ONLY for
select 'alter index ' + QUOTENAME(i.name) + ' on ' + o.name + ' rebuild'
from sys.indexes as i
Inner Join sys.objects o
On o.object_id = i.object_id
Where o.is_ms_shipped = 0
And i.index_id >= 1
and i.type > 1
and i.is_disabled = 1
Ho considerato l'impostazione ONLINE = OFF per l'istruzione alter index, ma poiché gli indici iniziano disabilitati non ero sicuro che questa impostazione avrebbe avuto alcun effetto. Ho anche considerato di impostare SORT_IN_TEMPDB = ON, ma poiché i file tempdb si trovano sulla stessa unità dei file .mdf dei database, ho pensato che non ci sarebbe stato alcun vantaggio nel farlo.
Durante l'esecuzione dello script di ricostruzione ho notato che ho molti tipi di attesa di CXPACKET. Non capisco davvero perché sarebbe o se è un problema che dovrei cercare di affrontare.
Un ultimo punto che può essere rilevante: il mio intero server è attualmente inattivo diverso da questa importazione di dati nel database. Non ci sono altre attività dell'utente da considerare o di cui preoccuparsi; la mia unica preoccupazione è importare i dati nel database nel più breve tempo possibile.
CXPACKET
attese: l'indice si ricostruisce eseguendo la scansione degli indici (anche l'indice in fase di ricostruzione ) e tali scansioni possono utilizzare il parallelismo. Non dovresti preoccuparti di quelle attese - il parallelismo probabilmente sta aiutando.