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
ตัวอย่าง:
| T1 | T2 |
|---|---|
| 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
ตัวอย่าง:
| T1 | T2 |
|---|---|
| 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
ตัวอย่าง:
| T1 | T2 |
|---|---|
| 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
ตัวอย่าง:
| T1 | T2 |
|---|---|
| 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 เท่านั้น