การควบคุมการทำงานพร้อมกันของ DBMS: การประทับเวลาและโปรโตคอลแบบล็อค

การควบคุมภาวะพร้อมกันคืออะไร?

การควบคุมภาวะพร้อมกัน ระบบการจัดการฐานข้อมูลเป็นกระบวนการจัดการการดำเนินการพร้อมกันโดยไม่ขัดแย้งกัน ช่วยให้มั่นใจว่าธุรกรรมฐานข้อมูลดำเนินการพร้อมกันและถูกต้องเพื่อให้ได้ผลลัพธ์ที่ถูกต้องโดยไม่ละเมิดความสมบูรณ์ของข้อมูลของฐานข้อมูลที่เกี่ยวข้อง

การเข้าถึงพร้อมกันนั้นค่อนข้างง่ายหากผู้ใช้ทั้งหมดเพียงแค่อ่านข้อมูลเท่านั้น ไม่มีทางที่ผู้ใช้จะรบกวนซึ่งกันและกันได้ แม้ว่าฐานข้อมูลในทางปฏิบัติจะต้องมีการผสมผสานระหว่างการอ่านและการเขียน ดังนั้นการเข้าถึงพร้อมกันจึงเป็นเรื่องท้าทาย

การควบคุมการทำงานพร้อมกันของ DBMS ใช้เพื่อแก้ไขข้อขัดแย้งดังกล่าว ซึ่งส่วนใหญ่มักเกิดขึ้นกับระบบที่มีผู้ใช้หลายราย ดังนั้น การควบคุมการทำงานพร้อมกันจึงเป็นองค์ประกอบที่สำคัญที่สุดสำหรับการทำงานที่เหมาะสมของระบบจัดการฐานข้อมูลที่มีการดำเนินการธุรกรรมฐานข้อมูลสองรายการขึ้นไปพร้อมกัน ซึ่งต้องเข้าถึงข้อมูลเดียวกัน

ปัญหาที่อาจเกิดขึ้นจากการทำงานพร้อมกัน

ต่อไปนี้เป็นปัญหาบางประการที่คุณอาจเผชิญขณะใช้วิธีการควบคุมการทำงานพร้อมกันของ DBMS:

  • การอัปเดตที่หายไป เกิดขึ้นเมื่อธุรกรรมหลายรายการเลือกแถวเดียวกันและอัปเดตแถวตามค่าที่เลือก
  • ปัญหาการขึ้นต่อกันที่ไม่มีข้อผูกมัดเกิดขึ้นเมื่อธุรกรรมที่สองเลือกแถวซึ่งได้รับการอัพเดตโดยธุรกรรมอื่น (อ่านสกปรก)
  • อ่านซ้ำไม่ได้ เกิดขึ้นเมื่อธุรกรรมที่สองพยายามเข้าถึงแถวเดียวกันหลายครั้งและอ่านข้อมูลต่างกันในแต่ละครั้ง
  • ปัญหาสรุปไม่ถูกต้อง เกิดขึ้นเมื่อธุรกรรมหนึ่งใช้การสรุปมากกว่ามูลค่าของอินสแตนซ์ทั้งหมดของรายการข้อมูลที่ซ้ำ และธุรกรรมที่สองอัปเดตอินสแตนซ์สองสามรายการของรายการข้อมูลนั้น ในสถานการณ์นั้น ผลสรุปผลลัพธ์ไม่ได้สะท้อนถึงผลลัพธ์ที่ถูกต้อง

ทำไมต้องใช้วิธีเห็นพร้อมกัน?

เหตุผลในการใช้วิธีการควบคุมการทำงานพร้อมกันคือ DBMS:

  • เพื่อใช้การแยกผ่านการยกเว้นร่วมกันระหว่างธุรกรรมที่ขัดแย้งกัน
  • เพื่อแก้ไขปัญหาข้อขัดแย้งในการอ่าน-เขียนและการเขียน-การเขียน
  • เพื่อรักษาความสอดคล้องของฐานข้อมูลโดยการรักษาสิ่งกีดขวางในการดำเนินการอย่างต่อเนื่อง
  • ระบบจำเป็นต้องควบคุมการโต้ตอบระหว่างธุรกรรมที่เกิดขึ้นพร้อมกัน การควบคุมนี้ทำได้โดยใช้แผนการควบคุมที่เกิดขึ้นพร้อมกัน
  • การควบคุมการทำงานพร้อมกันช่วยให้มั่นใจถึงความสามารถในการซีเรียลไลซ์

ตัวอย่าง

ลองจินตนาการว่ามีคนสองคนไปที่ตู้จำหน่ายตั๋วอิเล็กทรอนิกส์ในเวลาเดียวกันเพื่อซื้อตั๋วหนังเรื่องเดียวกันและรอบฉายเดียวกัน

อย่างไรก็ตาม ที่นั่งชมภาพยนตร์ในโรงภาพยนตร์แห่งนั้นเหลือเพียงที่นั่งเดียวเท่านั้น หากไม่มีการควบคุมการทำงานพร้อมกันใน DBMS เป็นไปได้ที่ผู้ชมภาพยนตร์ทั้งสองคนจะต้องซื้อตั๋วในท้ายที่สุด อย่างไรก็ตาม วิธีการควบคุมภาวะพร้อมกันไม่อนุญาตให้สิ่งนี้เกิดขึ้น ผู้ชมภาพยนตร์ทั้งสองคนยังคงสามารถเข้าถึงข้อมูลที่เขียนไว้ในฐานข้อมูลที่นั่งชมภาพยนตร์ได้ แต่การควบคุมภาวะพร้อมกันจะให้ตั๋วแก่ผู้ซื้อที่ทำธุรกรรมเสร็จสิ้นก่อนเท่านั้น

โปรโตคอลควบคุมการทำงานพร้อมกัน

โปรโตคอลการควบคุมการทำงานพร้อมกันที่แตกต่างกันนั้นให้ประโยชน์ที่แตกต่างกันระหว่างจำนวนการทำงานพร้อมกันที่อนุญาตและจำนวนค่าใช้จ่ายที่เกิดขึ้น ต่อไปนี้เป็นเทคนิคการควบคุมการทำงานพร้อมกันใน DBMS:

  • โปรโตคอลแบบล็อค
  • โปรโตคอลการล็อคสองเฟส
  • โปรโตคอลที่อิงการประทับเวลา
  • โปรโตคอลที่ใช้การตรวจสอบความถูกต้อง

โปรโตคอลแบบล็อค

ล็อคโปรโตคอลตาม ใน DBMS มีกลไกที่ธุรกรรมไม่สามารถอ่านหรือเขียนข้อมูลได้จนกว่าจะได้ล็อกที่เหมาะสม โปรโตคอลที่ใช้ล็อกช่วยขจัดปัญหาการทำงานพร้อมกันใน DBMS สำหรับธุรกรรมพร้อมกันโดยการล็อกหรือแยกธุรกรรมเฉพาะให้กับผู้ใช้รายเดียว

ล็อคคือตัวแปรข้อมูลซึ่งเชื่อมโยงกับรายการข้อมูล ล็อคนี้หมายถึงการดำเนินการที่สามารถดำเนินการกับรายการข้อมูลได้ ล็อคใน DBMS ช่วยซิงโครไนซ์การเข้าถึงรายการฐานข้อมูลด้วยธุรกรรมที่เกิดขึ้นพร้อมกัน

คำขอล็อคทั้งหมดส่งไปยังผู้จัดการควบคุมการทำงานพร้อมกัน ธุรกรรมจะดำเนินการเฉพาะเมื่อได้รับคำขอล็อคแล้ว

ล็อคไบนารี: การล็อคแบบไบนารีในรายการข้อมูลสามารถล็อคหรือปลดล็อคสถานะได้

แชร์/พิเศษ: กลไกการล็อกประเภทนี้จะแยกล็อกใน DBMS ตามการใช้งาน หากล็อกไอเท็มข้อมูลเพื่อดำเนินการเขียน จะเรียกว่าล็อกพิเศษ

1. ล็อคที่ใช้ร่วมกัน (S):

ล็อคที่ใช้ร่วมกันเรียกอีกอย่างว่าล็อคแบบอ่านอย่างเดียว ด้วยการล็อคที่ใช้ร่วมกัน รายการข้อมูลสามารถใช้ร่วมกันระหว่างธุรกรรมได้ เนื่องจากคุณจะไม่ได้รับอนุญาตให้อัปเดตข้อมูลในรายการข้อมูล

ตัวอย่างเช่น พิจารณากรณีที่ธุรกรรมสองรายการกำลังอ่านยอดคงเหลือในบัญชีของบุคคล ที่ ฐานข้อมูล จะให้พวกเขาอ่านโดยวางล็อคที่ใช้ร่วมกัน อย่างไรก็ตาม หากธุรกรรมอื่นต้องการอัปเดตยอดคงเหลือของบัญชีนั้น การล็อคที่ใช้ร่วมกันจะป้องกันจนกว่ากระบวนการอ่านจะสิ้นสุด

2. ล็อคพิเศษ (X):

การล็อกแบบพิเศษช่วยให้สามารถอ่านและเขียนรายการข้อมูลได้ วิธีนี้ถือเป็นการล็อกแบบพิเศษและไม่สามารถล็อกรายการข้อมูลเดียวกันได้พร้อมกัน การล็อกแบบ X จะดำเนินการโดยใช้คำสั่ง lock-x ธุรกรรมอาจปลดล็อกรายการข้อมูลได้หลังจากเสร็จสิ้นการดำเนินการ "เขียน"

เช่น เมื่อธุรกรรมจำเป็นต้องอัปเดตยอดคงเหลือในบัญชีของบุคคล คุณสามารถอนุญาตให้ทำธุรกรรมนี้ได้โดยล็อก X ไว้ ดังนั้น เมื่อธุรกรรมที่สองต้องการอ่านหรือเขียน การล็อกพิเศษจะป้องกันไม่ให้ดำเนินการนี้

3. โปรโตคอลล็อคแบบง่าย

โปรโตคอลแบบล็อคประเภทนี้ช่วยให้ธุรกรรมสามารถล็อกอ็อบเจ็กต์ทุกรายการได้ก่อนเริ่มดำเนินการ ธุรกรรมอาจปลดล็อกรายการข้อมูลได้หลังจากเสร็จสิ้นการดำเนินการ "เขียน"

4. การล็อคการอ้างสิทธิ์ล่วงหน้า

โปรโตคอลการล็อกก่อนการอ้างสิทธิ์ช่วยประเมินการทำงานและสร้างรายการข้อมูลที่จำเป็นซึ่งจำเป็นในการเริ่มกระบวนการดำเนินการ ในสถานการณ์ที่อนุญาตให้ล็อกทั้งหมด ธุรกรรมจะดำเนินการ หลังจากนั้น ล็อกทั้งหมดจะปล่อยเมื่อการดำเนินการทั้งหมดเสร็จสิ้น

ความอดอยาก

ความอดอยากคือสถานการณ์ที่ธุรกรรมต้องรอเป็นระยะเวลาไม่แน่นอนจึงจะได้รับการล็อค

ต่อไปนี้คือสาเหตุของการอดอาหาร:

  • เมื่อรอโครงร่างสำหรับไอเท็มที่ถูกล็อคไม่ได้รับการจัดการอย่างเหมาะสม
  • ในกรณีที่ทรัพยากรรั่วไหล
  • ธุรกรรมเดียวกันถูกเลือกเป็นเหยื่อซ้ำแล้วซ้ำเล่า

การหยุดชะงัก

เดดล็อกหมายถึงสถานการณ์เฉพาะที่กระบวนการสองกระบวนการหรือมากกว่ากำลังรอกันและกันเพื่อปล่อยทรัพยากร หรือมีกระบวนการมากกว่าสองกระบวนการกำลังรอทรัพยากรในห่วงโซ่แบบวงกลม

โปรโตคอลการล็อคสองเฟส

โปรโตคอลการล็อคสองเฟส เรียกอีกอย่างว่าโปรโตคอล 2PL เป็นวิธีการควบคุมการทำงานพร้อมกันใน DBMS ที่รับรองความสามารถในการทำ serialization โดยการใช้การล็อกข้อมูลธุรกรรมซึ่งจะบล็อกธุรกรรมอื่นไม่ให้เข้าถึงข้อมูลเดียวกันพร้อมกัน โปรโตคอล Two Phase Locking ช่วยขจัดปัญหาการทำงานพร้อมกันใน DBMS

โปรโตคอลการล็อคนี้แบ่งขั้นตอนการดำเนินการของธุรกรรมออกเป็นสามส่วนที่แตกต่างกัน

  • ในระยะแรก เมื่อธุรกรรมเริ่มดำเนินการ จะต้องได้รับอนุญาตสำหรับการล็อคที่ต้องการ
  • ส่วนที่สองคือส่วนที่ธุรกรรมได้รับการล็อคทั้งหมด เมื่อธุรกรรมปลดล็อคครั้งแรก ระยะที่สามจะเริ่มต้นขึ้น
  • ในระยะที่สามนี้ ธุรกรรมไม่สามารถเรียกร้องการล็อคใหม่ได้ แต่จะปลดล็อคเฉพาะการล็อคที่ได้รับเท่านั้น

โปรโตคอลการล็อคสองเฟส

โปรโตคอลการล็อคแบบสองเฟสช่วยให้แต่ละธุรกรรมสามารถทำการล็อคหรือปลดล็อคคำขอได้ในสองขั้นตอน:

  • ระยะการเจริญเติบโต: ในขั้นตอนนี้ธุรกรรมอาจได้รับการล็อค แต่ไม่สามารถปลดล็อคใดๆ ได้
  • เฟสหดตัว: ในขั้นตอนนี้ ธุรกรรมอาจปลดล็อคแต่จะไม่ได้รับการล็อคใหม่

เป็นเรื่องจริงที่โปรโตคอล 2PL นำเสนอความสามารถในการทำ serialization ได้ อย่างไรก็ตาม โปรโตคอลดังกล่าวไม่ได้รับประกันว่าจะไม่มีการเกิดเดดล็อก

ในแผนภาพด้านบนนี้ คุณจะเห็นว่าเครื่องตรวจจับเดดล็อกในระดับท้องถิ่นและระดับโลกกำลังค้นหาเดดล็อกและแก้ไขปัญหาโดยดำเนินการธุรกรรมต่อสู่สถานะเริ่มต้น

วิธีการล็อคแบบสองเฟสที่เข้มงวด

ระบบล็อคแบบเข้มงวดสองเฟสเกือบจะคล้ายกับ 2PL ข้อแตกต่างเพียงอย่างเดียวคือ Strict-2PL จะไม่ปลดล็อคหลังจากใช้งาน มันจะเก็บล็อคทั้งหมดไว้จนถึงจุดกระทำและปลดล็อคทั้งหมดในคราวเดียวเมื่อกระบวนการสิ้นสุดลง

2PL แบบรวมศูนย์

ใน Centralized 2 PL ไซต์เดียวจะรับผิดชอบกระบวนการจัดการล็อค มีตัวจัดการล็อคเพียงตัวเดียวสำหรับ DBMS ทั้งหมด

สำเนาหลัก 2PL

กลไกการคัดลอกหลัก 2PL ตัวจัดการล็อคจำนวนมากถูกแจกจ่ายไปยังไซต์ต่างๆ หลังจากนั้น ตัวจัดการการล็อกเฉพาะจะรับผิดชอบในการจัดการการล็อกสำหรับชุดของรายการข้อมูล เมื่อสำเนาหลักได้รับการปรับปรุงแล้ว การเปลี่ยนแปลงจะเผยแพร่ไปยังทาส

กระจาย 2PL

ในกลไกการล็อคแบบสองเฟสนี้ ตัวจัดการล็อคจะถูกกระจายไปยังไซต์ทั้งหมด พวกเขามีหน้าที่ในการจัดการล็อคข้อมูล ณ ไซต์นั้น หากไม่มีการจำลองข้อมูล จะเทียบเท่ากับสำเนาหลัก 2PL ต้นทุนการสื่อสารของ Distributed 2PL ค่อนข้างสูงกว่าสำเนา 2PL หลัก

โปรโตคอลที่อิงการประทับเวลา

โปรโตคอลตามการประทับเวลา ใน DBMS เป็นอัลกอริทึมที่ใช้ System Time หรือ Logical Counter เป็นค่าประทับเวลาเพื่อจัดลำดับการดำเนินการธุรกรรมที่เกิดขึ้นพร้อมกัน โปรโตคอลที่ใช้ Timestamp รับรองว่าการอ่านและการเขียนที่ขัดแย้งกันทั้งหมดจะดำเนินการตามลำดับเวลา

ธุรกรรมเก่าจะได้รับการจัดลำดับความสำคัญในวิธีนี้เสมอ ใช้เวลาของระบบเพื่อกำหนดเวลาประทับของธุรกรรม นี่คือโปรโตคอลการทำงานพร้อมกันที่ใช้บ่อยที่สุด

โปรโตคอลที่ใช้การล็อคช่วยให้คุณจัดการลำดับระหว่างธุรกรรมที่ขัดแย้งกันเมื่อจะดำเนินการ โปรโตคอลที่ใช้การประทับเวลาจะจัดการความขัดแย้งทันทีที่มีการสร้างการดำเนินการ

ตัวอย่าง:

Suppose there are there transactions T1, T2, and T3. 
T1 has entered the system at time 0010 
T2 has entered the system at 0020
T3 has entered the system at 0030
Priority will be given to transaction T1, then transaction T2 and lastly Transaction T3.

ข้อดี:

  • กำหนดการสามารถซีเรียลไลซ์ได้เช่นเดียวกับโปรโตคอล 2PL
  • ไม่ต้องรอทำธุรกรรม จึงขจัดความเสี่ยงในการเกิดการตันได้!

ข้อเสีย:

ความอดอยากเกิดขึ้นได้หากมีการรีสตาร์ทธุรกรรมเดิมและยกเลิกอย่างต่อเนื่อง

โปรโตคอลที่ใช้การตรวจสอบความถูกต้อง

โปรโตคอลที่ใช้การตรวจสอบความถูกต้อง ใน DBMS หรือที่เรียกว่า Optimistic Concurrency Control Technique เป็นวิธีหลีกเลี่ยงการทำธุรกรรมพร้อมกัน ในโปรโตคอลนี้ สำเนาของข้อมูลธุรกรรมในเครื่องจะได้รับการอัปเดตมากกว่าตัวข้อมูลเอง ซึ่งส่งผลให้เกิดการรบกวนน้อยลงในขณะที่ดำเนินธุรกรรม

โปรโตคอลที่ใช้การตรวจสอบจะดำเนินการในสามขั้นตอนต่อไปนี้:

  1. อ่านเฟส.
  2. ขั้นตอนการตรวจสอบ
  3. เขียนเฟส.

อ่านเฟส.

ในระยะการอ่าน ค่าข้อมูลจากฐานข้อมูลสามารถอ่านได้โดยธุรกรรม แต่การดำเนินการเขียนหรือการอัปเดตจะใช้กับสำเนาข้อมูลภายในเท่านั้น ไม่ใช่กับฐานข้อมูลจริง

ขั้นตอนการตรวจสอบ

ในขั้นตอนการตรวจสอบความถูกต้อง ข้อมูลจะถูกตรวจสอบเพื่อให้แน่ใจว่าไม่มีการละเมิดความสามารถในการทำให้เป็นอนุกรมในขณะที่ใช้การอัปเดตธุรกรรมกับฐานข้อมูล

เขียนเฟส.

ในขั้นตอนการเขียน การอัพเดตจะถูกนำไปใช้กับฐานข้อมูลหากการตรวจสอบความถูกต้องสำเร็จ มิฉะนั้น ไม่ได้ใช้การอัปเดต และธุรกรรมจะถูกย้อนกลับ

ลักษณะของพิธีสารการทำงานพร้อมกันที่ดี

กลไก DBMS การควบคุมพร้อมกันในอุดมคติมีวัตถุประสงค์ดังต่อไปนี้:

  • จะต้องมีความยืดหยุ่นต่อความล้มเหลวของไซต์และการสื่อสาร
  • ช่วยให้การทำธุรกรรมแบบขนานเพื่อให้บรรลุพร้อมกันสูงสุด
  • กลไกการจัดเก็บและวิธีการคำนวณควรมีขนาดพอประมาณเพื่อลดค่าใช้จ่ายให้เหลือน้อยที่สุด
  • จะต้องบังคับใช้ข้อจำกัดบางประการเกี่ยวกับโครงสร้างของการดำเนินการแบบอะตอมของธุรกรรม

สรุป

  • การควบคุมภาวะพร้อมกันเป็นขั้นตอนใน DBMS เพื่อการจัดการการทำงานพร้อมกันโดยไม่เกิดความขัดแย้งกัน
  • การอัปเดตที่สูญหาย การอ่านสกปรก การอ่านซ้ำไม่ได้ และปัญหาสรุปที่ไม่ถูกต้อง เป็นปัญหาที่ต้องเผชิญเนื่องจากขาดการควบคุมการทำงานพร้อมกัน
  • Lock-Based, Two-Phase, Timestamp-Based, Validation-Based เป็นประเภทของโปรโตคอลการจัดการภาวะพร้อมกัน
  • การล็อคอาจเป็นแบบแชร์ (S) หรือแบบพิเศษ (X)
  • โปรโตคอลการล็อกแบบ 2 เฟส ซึ่งเรียกอีกอย่างว่าโปรโตคอล 2PL จำเป็นต้องให้ธุรกรรมได้รับล็อกหลังจากที่ปลดล็อกใดล็อกหนึ่งแล้ว โปรโตคอลนี้มี XNUMX เฟส คือ ระยะเติบโตและระยะหดตัว
  • อัลกอริธึมที่อิงการประทับเวลาใช้การประทับเวลาเพื่อทำให้การดำเนินการธุรกรรมที่เกิดขึ้นพร้อมกันเป็นอนุกรม โปรโตคอลใช้ เวลาของระบบหรือจำนวนลอจิคัลเป็น การประทับเวลา