INSERT üzerinde TABLOCK İLE kullanmanın faydaları


15

Bazı durumlarda, INSERT INTO <tablename> (WITH TABLOCK)minimum günlük kaydı nedeniyle bir işlem yapmak daha hızlı olacaktır. Bu koşullar arasında veritabanının BULK_LOGGEDkurtarma modelinde bulunması yer alır.

Kullanarak başka bir potansiyel performans yararı var mı WITH TABLOCK, bir de INSERTveritabanı (zaman boş bir masaya Tempdb ) kullandığı SIMPLEkurtarma modeli?

SQL Server 2012 Standard Edition ile çalışıyorum.

Benim kullanım durumum bir saklı yordam içinde bir geçici tablo oluşturmak ve hemen INSERT...SELECTbirkaç milyon satır içerebilir bir kullanarak doldurmak için . Bu tür tempdb kötüye kullanımından kaçınmaya çalışıyorum , ancak bazen gerekli.

Talep etmek için bir dava oluşturmaya çalışıyorum TABLOCK. Hiçbir şeye zarar vermeyecek gibi görünmüyor ve bir yararı olabilir. Tabloya yazmak isteyen başka bir işlem olmadığından eminim nerede kod tabanı boyunca eklemek için yeterli potansiyel yarar olup olmadığını anlamaya çalışıyorum.

Genellikle kümelenmiş bir PK ile yeni oluşturulan bir yerel geçici tabloya ekliyorum, ancak bazen bir yığın kullanın.

Yanıtlar:


17

Birkaç faydası biliyorum ama çoğunlukla durumsal.

  1. Kullanmak TABLOCKeşzamanlılığı azaltacaktır, ancak hemen hedef tabloda bir tablo kilidi alacaktır. Tabloya yalnızca bir oturumun ekleneceğini garanti edebildiğiniz sürece, bu gereksiz satır veya sayfa kilitlerini önler ve kilit yükselmesini önler . Sonuçta, yine de kilit artışını alacak kadar çok veri ekliyorsanız, neden önceden yapmıyorsunuz?
  2. TABLOCKTüm sayfalar olmadan boş bir sayfa sıkıştırılmış yığın içine ekliyorsanız , sayfa sıkıştırması yerine satır sıkıştırması olur :

Yeni eklenen satır sayfa sıkıştırılır:

  • yeni satır sayfa sıkıştırmalı mevcut bir sayfaya giderse

  • yeni satır TABLOCK ile BULK INSERT içinden eklenirse

  • yeni satır INSERT INTO ... (TABLOCK) ile eklenirse

Aksi takdirde, satır satır sıkıştırılır.

  1. SQL Server 2016'da, yığınlara , CCI'lere (Kümelenmiş Sütun Deposu Endeksleri) ve yerel geçici tablolaraTABLOCK paralel ekleme almak için ipucu gerekir . Bazıları belgelenmemiş birçok kısıtlama vardır. Bir sütun olamaz, ekleme bir vb. Yoluyla yapılamaz .IDENTITYOUTPUT

Ayrıca bkz . Veri Yükleme Performansı Kılavuzu

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.