Site icon PlusMagi's Blog By Pitt Phunsanit

SQL Server: Lock Mode

ในระบบ SQL Server Lock Mode คือตัวบอก “สิทธิ์” ( Permission ) ในการเข้าถึงทรัพยากรนั้น ๆ ว่าคนที่ถือ Lock อยู่กำลังทำอะไร และยอมให้คนอื่นเข้ามาทำอะไรได้บ้าง


โหมดพื้นฐาน ( Basic Modes )


โหมดแสดงเจตจำนง ( Intent Modes )

โหมดเหล่านี้มักจะขึ้นที่ระดับ OBJECT ( Table ) เพื่อบอกว่า “ข้างในตารางนี้ มีบางแถวโดน Lock อยู่นะ”


สรุปตารางความเข้ากันได้ ( Lock Compatibility )

ถ้า Mode ชนกันจะเกิดสถานะ WAIT

Mode ที่ถืออยู่ขอ S (อ่าน)ขอ X (เขียน)ผลลัพธ์
S (อ่านอยู่)✅ ได้❌ ติด WAITอ่านพร้อมกันได้ แต่แก้ไม่ได้
X (เขียนอยู่)❌ ติด WAIT❌ ติด WAITคนอื่นทำอะไรไม่ได้เลย ต้องรอ
IX (จองแก้บางแถว)❌ ติด WAIT*✅ ได้**ถ้าแก้คนละแถวทำได้ แต่ถ้าจะอ่านทั้งตารางต้องรอ

ความหมายของ Lock Mode ในผลลัพธ์ SQL

LockModeชื่อเต็มความหมายและสิ่งที่เกิดขึ้น
SSharedใช้ตอนอ่านข้อมูล ( SELECT ): อนุญาตให้คนอื่นอ่านแถว / ตารางนี้พร้อมกันได้ แต่ห้ามใครมาแก้ไขจนกว่าจะอ่านจบ
XExclusiveใช้ตอนเขียนข้อมูล ( UPDATE / DELETE / INSERT ): ห้ามคนอื่นเข้ามายุ่งเด็ดขาด ไม่ว่าจะอ่านหรือแก้ เพื่อป้องกันข้อมูลพัง
UUpdateโหมดกึ่งกลาง: ใช้ตอนกำลังค้นหาข้อมูลเพื่อจะ Update เพื่อป้องกันไม่ให้คนอื่นเข้ามาจองแก้ในเวลาเดียวกัน ( ป้องกัน Deadlock )
ISIntent Sharedบอกในระดับบน ( เช่น Table ) ว่า “ฉันกำลังถือ Lock แบบ S อยู่ที่ระดับล่าง ( เช่น Row ) นะ”
IXIntent Exclusiveบอกในระดับบน ( เช่น Table ) ว่า “ฉันกำลังถือ Lock แบบ X อยู่ที่ระดับล่าง ( เช่น Row ) นะ”
SIXShared Intent Exclusive“ฉันกำลังอ่านข้อมูลทั้งตาราง ( S ) และมีแผนจะแก้ไขบางแถว ( IX ) ในตารางนี้ด้วย”
Sch-MSchema Modificationใช้ตอนแก้โครงสร้าง: เช่น ALTER TABLE หรือ DROP TABLE ห้ามใครเข้าใกล้ตารางนี้เด็ดขาดแม้แต่จะอ่าน
Sch-SSchema Stabilityใช้ตอน Compile Query: เพื่อล็อกโครงสร้างตารางไว้ไม่ให้ใครมาแก้ตอนที่ Query กำลังทำงาน ( เป็นโหมดที่เบาที่สุด )

อ่านเพิ่มเติม

Exit mobile version