Uzyskaj minimalne rejestrowanie podczas ładowania danych do tabel tymczasowych

10

Nawet po przeczytaniu Przewodnika wydajności ładowania danych nadal nie jestem pewien, czy konieczne jest dodanie podpowiedzi do tabeli TABLOCK do pustej tabeli tymczasowej, zdefiniowanej za pomocą indeksu klastrowego, aby uzyskać minimalne rejestrowanie.

Oczywiście tabela temp jest tworzona w TempDB, który działa w trybie odzyskiwania SIMPLE, więc pomyślałbym, że jest idealnym kandydatem do minimalnego rejestrowania, ale nie mogę znaleźć fragmentu, aby to potwierdzić.

Czy tabela tymczasowa jest kandydatem do minimalnego logowania, a jeśli tak, to czy warto dodać wskazówkę TABLOCK zgodnie z zaleceniami dla tabel stałych?

Piksele
źródło

Odpowiedzi:

18

Nie jestem pewien, czy konieczne jest dodanie TABLOCKpodpowiedzi do tabeli do pustej tabeli tymczasowej, zdefiniowanej za pomocą indeksu klastrowego, aby uzyskać minimalne rejestrowanie.

Nie. Lokalne tabele tymczasowe ( #temp) są prywatne dla sesji tworzenia, więc wskazówka dotycząca blokady tabeli nie jest wymagana. Wskazówka dotycząca blokady tabeli byłaby wymagana dla globalnej tabeli tymczasowej ( ##temp) lub zwykłej tabeli ( dbo.temp) utworzonej w tempdb, ponieważ można je uzyskać z wielu sesji.

Należy pamiętać, że nawet w przypadku, gdy nie są stosowane pełne minimalne optymalizacje rejestrowania, tabele utworzone tempdbkorzystają z innych optymalizacji, takich jak brak konieczności rejestrowania REDOinformacji. Możesz sprawdzić, czy wiersze lub strony są rejestrowane przy użyciu nieudokumentowanej sys.fn_dblog. Regularne rejestrowanie będzie zawierać rekordy rejestrowane w wierszach, takie jak LOP_INSERT_ROWS.


Należy pamiętać, że dodanie TABLOCKdo lokalnej tabeli tymczasowej jest wymagane, aby uzyskać równoległe wykonywanie INSERT...SELECTzapytań w SQL Server 2016, zobacz artykuł z bazy wiedzy Microsoft Knowledge Base:

Niska wydajność po uruchomieniu operacji INSERT .. SELECT w programie SQL Server 2016

Paul White 9
źródło