Dapatkan penebangan minimal saat memuat data ke tabel sementara

10

Bahkan setelah membaca Panduan Kinerja Pemuatan Data , saya masih tidak yakin apakah perlu menambahkan petunjuk tabel TABLOCK ke tabel sementara yang kosong, didefinisikan dengan indeks berkerumun untuk mendapatkan penebangan minimal.

Jelas tabel temp dibuat dalam TempDB yang beroperasi dalam mode pemulihan SEDERHANA jadi saya akan berpikir bahwa itu adalah kandidat yang sempurna untuk penebangan minimal, namun saya tidak dapat menemukan bagian untuk mengkonfirmasinya.

Apakah tabel sementara adalah kandidat untuk penebangan minimal, dan jika demikian, apakah layak menambahkan petunjuk TABLOCK seperti yang direkomendasikan untuk tabel permanen?

Pixelated
sumber

Jawaban:

18

Saya tidak yakin apakah perlu menambahkan TABLOCKpetunjuk tabel ke tabel sementara yang kosong, didefinisikan dengan indeks berkerumun untuk mendapatkan penebangan minimal.

Tidak. Tabel sementara lokal ( #temp) bersifat pribadi untuk sesi pembuatan, jadi petunjuk kunci tabel tidak diperlukan. Petunjuk kunci tabel akan diperlukan untuk tabel sementara global ( ##temp) atau tabel biasa ( dbo.temp) dibuat tempdb, karena ini dapat diakses dari beberapa sesi.

Perhatikan bahwa bahkan di mana optimisasi logging minimal penuh tidak diterapkan, tabel dibuat untuk tempdbmendapatkan manfaat dari optimasi lain seperti tidak perlu mencatat REDOinformasi. Anda dapat menguji untuk melihat apakah baris atau halaman sedang dicatat menggunakan yang tidak terdokumentasi sys.fn_dblog. Logging biasa akan menampilkan catatan baris-log seperti LOP_INSERT_ROWS.


Perhatikan bahwa menambahkan TABLOCKke tabel sementara lokal diperlukan untuk mendapatkan eksekusi paralel dengan INSERT...SELECTkueri di SQL Server 2016, lihat artikel Pangkalan Pengetahuan Microsoft:

Kinerja buruk ketika Anda menjalankan INSERT .. Operasi SELECT di SQL Server 2016

Paul White 9
sumber