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

การควบคุมการทำงานพร้อมกันโดยใช้การล็อกใน DBMS


การล็อกเป็นส่วนสำคัญในการรักษาการควบคุมภาวะพร้อมกันใน 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 ทั้งล็อกที่ใช้ร่วมกันและ การล็อกแบบเอกสิทธิ์เฉพาะบุคคลจะปลดล็อกหลังจากการทำธุรกรรมเสร็จสิ้นเท่านั้น