Wann sollte sort_in_tempdb beim Neuerstellen von Indizes verwendet werden?

22

Wir überlegen, ob die Option SORT_IN_TEMPDB für unsere DW-Tabellen verwendet werden soll. Ich verstehe, dass es mehr Schreibvorgänge gibt, wenn diese Option verwendet wird, obwohl sie sequentieller sind. Wir haben ein SAN (das zuweilen notorisch langsam war), daher möchten wir in unserem Fall die Anzahl der Schreibvorgänge so weit wie möglich begrenzen. Ich glaube, Tempdb ist auf einer separaten LUN (Satz von Datenträgern).

Wir haben viel Speicherplatz in unserer Datendatei und in unserer Tempdb-Datei. Würden wir in diesem Fall von der Verwendung von SORT_IN_TEMPDB profitieren?

Eine Sache, die mich beeindruckt hat, war dieser Kommentar zu dieser Antwort

Wenn Sie einen Index neu erstellen, benötigen Sie den doppelten Platz des Index + 20% für die Sortierung. Um also jeden Index in Ihrer Datenbank neu zu erstellen, benötigen Sie im Allgemeinen nur 120% Ihres größten Index in Ihrer Datenbank. Wenn Sie SORT_IN_TEMPDB verwenden, gewinnen Sie nur 20%, Sie benötigen jedoch weitere 100% in Ihrer Datendatei. Darüber hinaus erhöht die Verwendung von sort in tempdb die E / A-Last drastisch, da Sie den Index nicht nur einmal in die Datendatei schreiben, sondern ihn nun einmal in die Tempdb und anschließend in die Datendatei schreiben. Das ist also nicht immer ideal.

Wir möchten unsere E / A-Last definitiv nicht mit unserem langsamen / möglicherweise falsch konfigurierten SAN erhöhen.

Was wäre der beste Weg, um dies zu testen? Indem Sie einfach die Tabelle mit und ohne die Option neu erstellen und die Zeiten protokollieren?

Bearbeiten : Wir haben 8 Tempdb-Dateien mit jeweils 15 GB. Wir haben TF 1117/1118 Flags gesetzt und IFI ist aktiviert. Derzeit führen wir eine Mischung aus Neuaufbau mit der Option sort_in_tempdb und ohne diese durch.

Vielen Dank!

SQL Server 2012 Enterprise

Gabe
quelle

Antworten:

22

SORT_IN_TEMPDBbedeutet, dass SQL Server tempdbden temporären Speicherplatz zuweist, anstatt Speicherplatz in der Benutzerdatenbank zuzuweisen, deren Index neu erstellt wird. Dies bedeutet, dass Sie während eines Indexneubauvorgangs weniger freien Speicherplatz in Ihrer Benutzerdatenbank und in Tempdb mehr freien Speicherplatz benötigen.

Es bietet Ihnen einen besseren Vorteil, wenn sich tempdb auf einem anderen Satz von Datenträgern (LUNs) als die Benutzerdatenbank befindet.

Aus der Option SORT_IN_TEMPDB - BOL :

Wenn die Option SORT_IN_TEMPDB auf ON gesetzt ist und sich tempdb auf einem von der Zieldateigruppe getrennten Datenträgersatz befindet, werden die Datenseiten in der ersten Phase auf einem anderen Datenträger gelesen als die Schreibvorgänge in den Sortierarbeitsbereich in tempdb. Dies bedeutet, dass die Datenträgerlesevorgänge der Datenschlüssel im Allgemeinen serieller über den Datenträger fortgesetzt werden und die Schreibvorgänge auf den Tempdb-Datenträger im Allgemeinen seriell sind, ebenso wie die Schreibvorgänge zum Erstellen des endgültigen Index. Selbst wenn andere Benutzer die Datenbank verwenden und auf separate Festplattenadressen zugreifen, ist das allgemeine Lese- und Schreibmuster effizienter, wenn SORT_IN_TEMPDB angegeben wird, als wenn dies nicht der Fall ist .

Stellen Sie sicher, dass Sie die Speicherplatzanforderungen gelesen haben, wenn SORT_IN_TEMPDB auf ON gesetzt ist .

langsames / möglicherweise falsch konfiguriertes SAN

Sie kennen den Schmerzpunkt. Warum arbeiten Sie nicht mit Ihrem SAN-Administrator zusammen, um das Problem zu beheben? Falsch konfiguriertes oder langsames SAN verursacht alle Arten von Problemen wie Langsamkeit .

Einige wichtige Punkte zu beachten:

Was wäre der beste Weg, um dies zu testen?

Ja, Sie müssen es testen, indem Sie die Wartestatistiken analysieren, wenn Sie den Index mit und ohne Neuerstellung erstellenSORT_IN_TEMPDB . Messen Sie auch die Laufzeit und stellen Sie in PROD sicher, dass Sie dies während eines Wartungsfensters oder einer geringeren Serveraktivität tun. Überprüfen Sie auch Ihre Lese- / Schreibdaten und die Protokolllatenz .

Ich bin mir nicht sicher, ob Sie eine Instant-Datei-Initialisierung haben , aber es wird beim Wiederherstellen, während des automatischen Wachstums von Datendateien und beim Erstellen einer neuen Datenbank von Vorteil sein (der Vollständigkeit halber nur erwähnt).

Kin Shah
quelle
Ich habe meinen Kommentar mit meiner Tempdb-Konfiguration bearbeitet. Vielen Dank, wusste nicht über die serielle Online-Neuerstellung Tipp. Ich werde noch ein paar Tests machen und versuchen, mich an den SAN-Administrator zu wenden, der leider alles andere als freundlich war. Gibt es bestimmte Wartestatistiken, die ich vergleichen sollte (z. B. PageIOLatch)? Unsere Tempdb-Schreibvorgänge sind superhoch (4000 ms), was horrend ist. Unter 40 ms für Haupt-DBs. Das könnte aber eine Frage für ein anderes Mal sein ...!
Gabe
@Gabe Sie sollten Ihrem SAN-Administrator die richtigen Fakten darüber vorlegen, dass es sich tatsächlich um ein SAN-Problem handelt - Lese- / Schreibverzögerung - sys.dm_io_virtual_file_stats . Befindet sich Ihr Tempdb auf einer separaten LUN?
Kin Shah