Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

Concurrency Control ด้วย Locks ใน DBMS: โปรโตคอลต่างๆ


Locks เป็นส่วนสำคัญในการควบคุม Concurrency (ควบคุมการทำงานพร้อมกัน) ใน DBMS Transaction ในระบบที่ใช้ Lock-based Concurrency Control ไม่สามารถ Read หรือ Write ได้ จนกว่าจะได้ Lock ที่จำเป็น

มี 2 ประเภทของ Locks ใน Lock-based Protocols:

  • Binary Locks: มีแค่ 2 สถานะ Locked หรือ Unlocked
  • Shared/Exclusive Locks:
    • Shared Locks (S): ได้เมื่อทำ Read เท่านั้น แชร์ระหว่าง Transactions หลายตัวได้ เพราะไม่มีการเปลี่ยนแปลงข้อมูล
    • Exclusive Locks (X): ใช้เมื่อทำ Write Operation เฉพาะ Transaction ที่ถือ Exclusive Lock ถึงจะเปลี่ยนค่าข้อมูลได้

โปรโตคอล Locking ต่างๆ

1. Simplistic Lock Protocol

Transaction ได้ Lock ก่อน Write Operation หลัง Write เสร็จ ค่อย Release Lock

ตัวอย่าง:

T1T2
R(A)
R(A)
Lock(B)
R(B)
W(B)
Unlock(B)
Lock(C)
R(C)
W(C)
Unlock(C)
Commit
Commit

ไม่ต้อง Lock สำหรับ Read แต่ก่อน Write ต้อง Lock และ Release หลังเสร็จ

2. Two-Phase Locking Protocol (2PL)

มี 2 Phase: Growing Phase (ได้ Lock เท่านั้น) และ Shrinking Phase (Release Lock เท่านั้น ห้ามได้ Lock ใหม่) Exclusive Lock = X, Shared Lock = S

ตัวอย่าง:

T1T2
S(A)
R(A)
S(A)
R(A)
X(B)
R(B)
W(B)
X(C)
R(C)
W(C)
Unlock(C)
Unlock(A)
Unlock(B)
Unlock(A)
Commit
Commit

T1 และ T2 แชร์ A ด้วย Shared Lock (Read เท่านั้น) T1 Lock X บน B สำหรับ Write T2 ทำเหมือนกันกับ C

3. Strict Two-Phase Locking Protocol (Strict 2PL)

คล้าย 2PL แต่ต่างตรงที่: Exclusive Locks ทั้งหมดต้องถือจนกว่า Transaction จะ Commit หรือ Abort

ตัวอย่าง:

T1T2
S(A)
R(A)
S(A)
R(A)
X(B)
R(B)
W(B)
X(C)
R(C)
W(C)
Unlock(A)
Unlock(A)
Commit
Unlock(B)
Commit
Unlock(C)

Exclusive Locks ปล่อยหลัง Commit เท่านั้น Shared Locks ไม่มีข้อจำกัดนี้

4. Rigorous Two-Phase Locking Protocol

ขยายจาก 2PL และ Strict 2PL ทุก Locks (Shared และ Exclusive) ถูกปล่อยก็ต่อเมื่อ Transaction Commit หรือ Abort

ตัวอย่าง:

T1T2
S(A)
R(A)
S(A)
R(A)
X(B)
R(B)
W(B)
X(C)
R(C)
W(C)
Commit
Unlock(A)
Unlock(B)
Commit
Unlock(A)
Unlock(C)

Shared และ Exclusive Locks ทั้งคู่ปล่อยหลัง Commit เท่านั้น