SQL Server กำหนดลำดับการล็อคในขณะที่เลือกตารางได้อย่างไร


10

ฉันมีสองโพรซีเดอร์ที่เก็บไว้ซึ่งหยุดชะงักเมื่อระบบอยู่ระหว่างการโหลด Proc A กำลังเลือกจากตารางในขณะที่ Proc B กำลังแทรกลงในตารางเดียวกัน กราฟล็อคแสดงว่า Proc A มีการล็อกหน้าโหมด S ที่ Proc B ต้องการล็อคโหมด IX สำหรับ Proc A อย่างไรก็ตามกำลังรอการล็อกหน้าโหมด S สำหรับหน้าอื่นที่ Proc B มีการล็อกหน้าโหมด IX แล้ว .

เห็นได้ชัดว่าสามารถแยกออกได้ด้วยการทำให้แน่ใจว่าทั้งคิวรีล็อคหน้าในตารางในลำดับเดียวกัน แต่ฉันไม่สามารถหาวิธีที่จะทำ

คำถามของฉันคือSQL Server จะกำหนดลำดับที่จะล็อคหน้าในขณะที่ทำ INSERTs และ SELECT และวิธีที่คุณสามารถปรับเปลี่ยนพฤติกรรมนี้ได้อย่างไร

คำตอบ:


2

SQL Server จะกำหนดลำดับการล็อกหน้าในขณะที่ทำ INSERTs และ SELECTs อย่างไร

ไม่บึกบึน - ดำเนินการโดยการประมวลผลภายในและขึ้นอยู่กับเอาต์พุตเครื่องมือเพิ่มประสิทธิภาพคิวรี

และคุณจะแก้ไขพฤติกรรมนี้ได้อย่างไร

ควบคุมความเหงาของคุณ ถ้าคุณอ่านเพื่อเขียนบอกให้ SQL Server รับล็อคการเขียนทันที จุดปิด


1

ปัจจุบัน proc A มีการล็อคที่ใช้ร่วมกัน

"ไม่มีธุรกรรมอื่นใดสามารถแก้ไขข้อมูลได้ในขณะที่การล็อค (S) ที่แชร์อยู่บนทรัพยากร" http://msdn.microsoft.com/en-us/library/aa213039%28v=sql.80%29.aspx

หากคุณอยู่ใน sql 2005 หรือสูงกว่าให้ลองใช้การแยกสแนปชอต

"ระดับการแยกสแน็ปช็อตใช้การกำหนดเวอร์ชันของแถวเพื่อให้ความสอดคล้องในการอ่านระดับธุรกรรมการดำเนินการอ่านไม่มีการล็อกหน้าหรือแถวการล็อคตาราง SCH-S เท่านั้นที่ได้มาเมื่ออ่านแถวที่แก้ไขโดยธุรกรรมอื่น มีอยู่เมื่อธุรกรรมเริ่มต้นคุณสามารถใช้การแยก Snapshot กับฐานข้อมูลเมื่อมีการตั้งค่าตัวเลือกฐานข้อมูล ALLOW_SNAPSHOT_ISOLATION โดยค่าเริ่มต้นตัวเลือกนี้จะถูกตั้งค่า OFF สำหรับฐานข้อมูลผู้ใช้ " http://msdn.microsoft.com/en-us/library/ms189122.aspx

เนื่องจากมีการรับล็อค Sch-S เท่านั้นการ 'อ่านของคุณจึงไม่สามารถบล็อก' การเขียนของคุณได้

"การล็อค Schema เสถียรภาพ (Sch-S) ไม่บล็อกการล็อคธุรกรรมใด ๆ รวมถึงการล็อค (X) แบบเอกสิทธิ์เฉพาะบุคคล" http://msdn.microsoft.com/en-us/library/ms189122.aspx

โปรดทราบว่า Snapshot Isolation Level ใช้งานหนักของ tempdb สำหรับการกำหนดเวอร์ชันของแถวดังนั้นปรับขนาดให้เหมาะสมและปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุดสำหรับกลยุทธ์ดิสก์ tempdb

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