การล็อกเป็นส่วนสำคัญในการรักษาการควบคุมภาวะพร้อมกันใน DBMS ธุรกรรมในระบบใดๆ ที่ใช้การควบคุมการทำงานพร้อมกันแบบล็อกโดยใช้ล็อกจะไม่สามารถอ่านหรือเขียนคำสั่งได้จนกว่าจะได้รับการล็อกที่จำเป็น
การล็อกมีสองประเภทในโปรโตคอลที่ใช้ล็อก เหล่านี้คือ:
- ล็อคไบนารี - สิ่งเหล่านี้สามารถอยู่ในสถานะใดสถานะหนึ่งจากสองสถานะเท่านั้น ล็อกหรือปลดล็อก
- ล็อคแบบใช้ร่วมกัน/พิเศษ - ล็อกที่ใช้ร่วมกันจะได้รับเมื่อดำเนินการอ่านเท่านั้น ล็อกที่ใช้ร่วมกันสามารถใช้ร่วมกันระหว่างหลายธุรกรรม เนื่องจากไม่มีการเปลี่ยนแปลงข้อมูล การล็อกแบบเอกสิทธิ์เฉพาะบุคคลจะใช้เมื่อดำเนินการเขียน เฉพาะธุรกรรมที่มีการล็อคแบบเอกสิทธิ์เฉพาะบุคคลเท่านั้นที่ได้รับอนุญาตให้เปลี่ยนแปลงค่าข้อมูลได้
โปรโตคอลการล็อคที่แตกต่างกันคือ −
โปรโตคอลการล็อกแบบง่าย
ธุรกรรมจะได้รับล็อกจากค่าข้อมูลก่อนดำเนินการเขียน หลังจากดำเนินการเขียนแล้ว สามารถปลดล็อคได้ ตัวอย่างของ Simplistic Lock Protocol คือ:
T1 | T2 |
---|---|
R(A) | |
| R(A) |
ล็อก(B) | |
R(B) | |
ว(B) | |
ปลดล็อค(B) | |
| ล็อก(C) |
| R(C) |
| ว(C) |
| ปลดล็อค(C) |
มุ่งมั่น | |
| มุ่งมั่น |
มีสองธุรกรรม T1 และ T2 ที่แสดงด้านบน ไม่มีการล็อกที่จำเป็นสำหรับการดำเนินการอ่าน แต่ก่อนการดำเนินการเขียน ธุรกรรมแต่ละรายการจะได้รับล็อกและปลดล็อกหลังจากนั้น
โปรโตคอลการล็อกสองเฟส
โปรโตคอลการล็อกแบบสองเฟสมีสองขั้นตอน คือ ระยะการเติบโตและการหดตัว ธุรกรรมสามารถรับกุญแจได้ก็ต่อเมื่ออยู่ในช่วงการเติบโตเท่านั้น เมื่อเข้าสู่ขั้นตอนการหดตัว จะสามารถปลดล็อคล็อคที่ได้มาก่อนหน้านี้แต่ไม่สามารถรับล็อคใหม่ได้ ล็อคพิเศษแสดงด้วย X และล็อคที่ใช้ร่วมกันแสดงโดย S ตัวอย่างของโปรโตคอลการล็อคแบบสองเฟสคือ -
T1 | T2 |
---|---|
S(A) | |
R(A) | |
| ส(A) |
| R(A) |
X(B) | |
R(B) | |
ว(B) | |
| X(C) |
| R(C) |
| ว(C) |
| ปลดล็อค(C) |
| ปลดล็อค(A) |
ปลดล็อค(B) | |
ปลดล็อค(A) | |
มุ่งมั่น | |
| มุ่งมั่น |
ในตัวอย่างข้างต้น T1 และ T2 แชร์ตัวแปร A โดยใช้การล็อกแบบแบ่งใช้ เนื่องจากดำเนินการอ่านอย่างเดียวบน A T1 จะได้รับล็อกแบบเอกสิทธิ์เฉพาะบน B สำหรับการดำเนินการเขียนและเผยแพร่หลังจากนั้นไม่นาน T2 ทำเช่นเดียวกันกับ C.
โปรโตคอลการล็อกสองเฟสที่เข้มงวด
โปรโตคอลการล็อกแบบสองเฟสที่เข้มงวดจะคล้ายกับโปรโตคอลการล็อกแบบสองเฟส ข้อแตกต่างเพียงอย่างเดียวคือในโปรโตคอล 2PL ที่เข้มงวด การล็อกแบบเอกสิทธิ์เฉพาะบุคคลทั้งหมดที่ได้รับจากโปรโตคอลจะต้องถูกระงับไว้จนกว่าโปรโตคอลจะกระทำการหรือยกเลิก ตัวอย่างของโปรโตคอลการล็อกสองเฟสที่เข้มงวดคือ:
T1 | T2 |
---|---|
S(A) | |
R(A) | |
| ส(A) |
| R(A) |
X(B) | |
R(B) | |
ว(B) | |
| X(C) |
| R(C) |
| ว(C) |
| ปลดล็อค(A) |
ปลดล็อค(A) | |
มุ่งมั่น | |
ปลดล็อค(B) | |
| มุ่งมั่น |
| ปลดล็อค(C) |
ในตัวอย่างข้างต้น T1 และ T2 แชร์ตัวแปร A โดยใช้การล็อกแบบแบ่งใช้เนื่องจากดำเนินการอ่านอย่างเดียวบน A T1 ได้รับการล็อกแบบเอกสิทธิ์เฉพาะบุคคลบน B สำหรับการดำเนินการเขียน และ T2 ทำเช่นเดียวกันกับ C ล็อกแบบเอกสิทธิ์เฉพาะบุคคลเท่านั้นที่จะออกเท่านั้น หลังจากทำธุรกรรมแล้ว อย่างไรก็ตาม ไม่มีขอบเขตสำหรับล็อคที่ใช้ร่วมกัน
โปรโตคอลการล็อกสองเฟสที่เข้มงวด
โปรโตคอลการล็อกแบบสองเฟสที่เข้มงวดเป็นเพียงส่วนขยายของโปรโตคอลการล็อกแบบสองเฟสและโปรโตคอลการล็อกแบบสองเฟสที่เข้มงวด ที่นี่ ล็อคทั้งหมดที่ถือโดยธุรกรรม ไม่ว่าจะใช้ร่วมกันหรือผูกขาด จะถูกปลดเมื่อธุรกรรมกระทำหรือยกเลิกเท่านั้น ตัวอย่างของโปรโตคอลการล็อกสองเฟสที่เข้มงวดคือ:
T1 | T2 |
---|---|
S(A) | |
R(A) | |
| ส(A) |
| R(A) |
X(B) | |
R(B) | |
ว(B) | |
| X(C) |
| R(C) |
| ว(C) |
มุ่งมั่น | |
ปลดล็อค(A) | |
ปลดล็อค(B) | |
| มุ่งมั่น |
| ปลดล็อค(A) |
| ปลดล็อค(C) |
ในตัวอย่างข้างต้น T1 และ T2 แชร์ตัวแปร A โดยใช้การล็อกที่ใช้ร่วมกันเนื่องจากดำเนินการอ่านอย่างเดียวบน A T1 ได้รับการล็อกแบบเอกสิทธิ์เฉพาะบุคคลบน B สำหรับการดำเนินการเขียน และ T2 ทำเช่นเดียวกันกับ C ทั้งล็อกที่ใช้ร่วมกันและ การล็อกแบบเอกสิทธิ์เฉพาะบุคคลจะปลดล็อกหลังจากการทำธุรกรรมเสร็จสิ้นเท่านั้น