Ich importiere eine große Datenmenge in eine leere Datenbank und habe vor dem Start alle nicht eindeutigen nicht gruppierten Indizes deaktiviert, um festzustellen, ob ich die Leistung des Imports verbessern kann.
Jetzt möchte ich die Indizes wieder aktivieren und frage mich, ob ich etwas tun kann, um dies zu optimieren.
Es müssen> 100 Tabellen und fast 2.000 Indizes neu erstellt werden. Die Datenbank ist 200 GB groß.
Der Schlüsselabschnitt des Skripts, das ich ausführe, ist folgender:
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
Ich habe überlegt, ONLINE = OFF für die Anweisung alter index zu setzen, aber als die Indizes deaktiviert beginnen, war ich mir nicht sicher, ob diese Einstellung Auswirkungen haben würde. Ich habe auch überlegt, SORT_IN_TEMPDB = ON zu setzen, aber da sich die Tempdb-Dateien auf demselben Laufwerk befinden wie die MDF-Dateien der Datenbanken, habe ich angenommen, dass dies auch keinen Vorteil hat.
Beim Ausführen des Wiederherstellungsskripts habe ich festgestellt, dass ich viele CXPACKET-Wartetypen habe. Ich verstehe nicht wirklich, warum das so ist oder ob es ein Problem ist, das ich ansprechen sollte.
Ein letzter Punkt, der relevant sein kann: Mein gesamter Server ist derzeit inaktiv, abgesehen von diesem Import von Daten in die Datenbank. Es gibt keine andere Benutzeraktivität, die berücksichtigt oder befürchtet werden muss. Mein einziges Anliegen ist es, die Daten in kürzester Zeit in die Datenbank zu importieren.
CXPACKET
Wartezeiten: Der Index erstellt sich selbst neu. Scan-Indizes (sogar der Index, der neu erstellt wird ), und diese Scans können Parallelität verwenden. Sie sollten sich keine Sorgen um diese Wartezeiten machen - die Parallelität hilft wahrscheinlich.