ประโยชน์ของการใช้ WITH TABLOCK บน INSERT


15

ในบางกรณีการทำINSERT INTO <tablename> (WITH TABLOCK)จะเร็วขึ้นเนื่องจากการบันทึกขั้นต่ำ สถานการณ์เหล่านั้นรวมถึงการมีฐานข้อมูลในBULK_LOGGEDรูปแบบการกู้คืน

มีประโยชน์ด้านประสิทธิภาพที่เป็นไปได้อื่น ๆ ที่จะใช้WITH TABLOCKในINSERTตารางว่างเปล่าเมื่อฐานข้อมูล ( tempdb ) กำลังใช้SIMPLEโมเดลการกู้คืนหรือไม่?

ฉันทำงานกับ SQL Server 2012 Standard Edition

กรณีการใช้งานของฉันใช้สำหรับการสร้างและจากนั้นสร้างตารางชั่วคราวภายในโพรซีเดอร์ที่เก็บไว้โดยใช้INSERT...SELECT, ซึ่งอาจมีแถวได้มากถึงสองสามล้านแถว ฉันพยายามหลีกเลี่ยงการใช้tempdb ในทางที่ผิด แต่บางครั้งก็จำเป็น

TABLOCKฉันพยายามที่จะสร้างกรณีที่จะต้องใช้ ดูเหมือนว่ามันจะไม่ทำร้ายอะไรและอาจมีประโยชน์ ฉันพยายามที่จะคิดออกว่ามีประโยชน์พอที่จะเพิ่มได้ทุกที่ในฐานรหัสของเราหรือไม่ซึ่งฉันแน่ใจว่าไม่มีกระบวนการอื่นที่ต้องการเขียนลงในตาราง

ฉันมักจะแทรกลงในตารางชั่วคราวที่สร้างขึ้นใหม่ด้วย PK แบบคลัสเตอร์ แต่บางครั้งก็ใช้กอง

คำตอบ:


17

ฉันรู้ถึงประโยชน์บางอย่าง แต่ส่วนใหญ่เป็นสถานการณ์

  1. การใช้TABLOCKจะลดการทำงานพร้อมกัน แต่จะล็อคตารางในตารางเป้าหมายทันที ตราบใดที่คุณสามารถรับประกันได้ว่าเพียงหนึ่งในเซสชั่นจะแทรกลงในตารางนี้จะหลีกเลี่ยงไม่จำเป็นแถวหรือหน้าล็อคและจะป้องกันไม่ให้เกิดการเพิ่มล็อค ท้ายที่สุดหากคุณกำลังแทรกข้อมูลจำนวนมากที่คุณจะได้รับการเพิ่มการล็อคอย่างไรก็ตามทำไมไม่ทำล่วงหน้า?
  2. หากคุณกำลังแทรกลงใน heap ที่ถูกบีบอัดหน้าเปล่าโดยไม่มีTABLOCKหน้าทั้งหมดจะมีการบีบอัดแถวแทนการบีบอัดหน้า :

แถวที่แทรกใหม่นั้นถูกบีบอัดหน้า:

  • ถ้าแถวใหม่ไปที่หน้าที่มีอยู่พร้อมกับการบีบอัดหน้า

  • ถ้าแทรกแถวใหม่ผ่าน BULK INSERT ด้วย TABLOCK

  • ถ้าแทรกแถวใหม่ผ่าน INSERT INTO ... (TABLOCK) SELECT จาก

มิฉะนั้นแถวจะถูกบีบอัดแถว

  1. ใน SQL Server 2016 TABLOCKจำเป็นต้องมีคำแนะนำเพื่อรับการแทรกแบบขนานในheaps , CCIs (ดัชนีคอลัมน์ที่เก็บแบบคลัสเตอร์)และตาราง temp ภายในเครื่อง มีข้อ จำกัด มากมายบางข้อไม่ได้จัดทำเป็นเอกสาร ไม่สามารถมีIDENTITYคอลัมน์แทรกไม่สามารถทำได้ผ่านOUTPUTฯลฯ

ดูคู่มือการโหลดข้อมูล

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.