หมวดหมู่: T-SQL

Microsoft SQL Server is Transact-SQL (T-SQL)

SQL Server: Lock ModeSQL Server: Lock Mode

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


โหมดพื้นฐาน

  • S : * ความหมาย: ใช้สำหรับการ “อ่าน”
    • พฤติกรรม: ยอมให้คนอื่นเข้ามาอ่าน พร้อมกันได้หลายคน แต่ ห้าม ใครเข้ามาแก้ไข จนกว่าจะอ่านเสร็จ
  • X
    • ความหมาย: ใช้สำหรับการ “เขียน/แก้ไข”
    • พฤติกรรม: เป็นโหมดเผด็จการ ห้ามคนอื่นเข้ามายุ่งเด็ดขาด ไม่ว่าจะอ่านหรือเขียน เพื่อป้องกันข้อมูลเพี้ยน
  • U
    • ความหมาย: โหมดเตรียมตัวแก้ไข
    • พฤติกรรม: ใช้ตอนที่ SQL กำลังค้นหาแถวเพื่อจะ Update โดย U จะยอมให้คนอื่นอ่านได้ แต่ห้ามคนอื่นมาจอง U หรือ X ซ้อน

โหมดแสดงเจตจำนง

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

  • IS : บอกว่า “ข้างในตารางนี้ มีบางแถวที่ฉันกำลังอ่านอยู่ “
  • IX : บอกว่า “ข้างในตารางนี้ มีบางแถวที่ฉันกำลังแก้ไขอยู่ “
  • SIX : บอกว่า “ฉันกำลังอ่านทั้งตารางนี้อยู่ และกำลังจะแก้ไขบางแถวในนี้ด้วย”

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

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

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

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

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

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