Erhalten Sie minimale Protokollierung, wenn Sie Daten in temporäre Tabellen laden

10

Selbst nach dem Lesen des Leistungshandbuchs zum Laden von Daten bin ich mir nicht sicher, ob es notwendig ist, den TABLOCK-Tabellenhinweis zu einer leeren temporären Tabelle hinzuzufügen, die mit einem Clustered-Index definiert ist, um eine minimale Protokollierung zu erzielen.

Offensichtlich wird die temporäre Tabelle in TempDB erstellt, die im EINFACHEN Wiederherstellungsmodus arbeitet. Ich hätte also gedacht, dass dies ein perfekter Kandidat für eine minimale Protokollierung ist, aber ich kann keine Passage finden, um dies zu bestätigen.

Ist eine temporäre Tabelle ein Kandidat für eine minimale Protokollierung, und wenn ja, lohnt es sich, den für permanente Tabellen empfohlenen TABLOCK-Hinweis hinzuzufügen?

Pixeliert
quelle

Antworten:

18

Ich bin mir nicht sicher, ob es notwendig ist, den TABLOCKTabellenhinweis zu einer leeren temporären Tabelle hinzuzufügen , die mit einem Clustered-Index definiert ist, um eine minimale Protokollierung zu erhalten.

Nein. Lokale temporäre Tabellen ( #temp) sind für die Erstellungssitzung privat , daher ist kein Hinweis zur Tabellensperre erforderlich. Für eine globale temporäre Tabelle ( ##temp) oder eine reguläre Tabelle ( dbo.temp), die in erstellt wurde tempdb, wäre ein Tabellensperrhinweis erforderlich , da auf diese von mehreren Sitzungen aus zugegriffen werden kann.

Beachten Sie, dass Tabellen, die mit tempdbanderen Optimierungen erstellt wurden, auch wenn keine vollständigen Protokollierungsoptimierungen angewendet werden, von anderen Optimierungen profitieren, z. B. dass keine REDOInformationen protokolliert werden müssen. Sie können testen, ob Zeilen oder Seiten mit undokumentiert protokolliert werden sys.fn_dblog. Bei der regelmäßigen Protokollierung werden zeilenprotokollierte Datensätze wie z LOP_INSERT_ROWS.


Beachten Sie, dass das Hinzufügen TABLOCKzu einer lokalen temporären Tabelle erforderlich ist, um eine parallele Ausführung mit INSERT...SELECTAbfragen in SQL Server 2016 zu erhalten. Weitere Informationen finden Sie im Microsoft Knowledge Base-Artikel:

Schlechte Leistung beim Ausführen von INSERT .. SELECT-Vorgängen in SQL Server 2016

Paul White 9
quelle