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

การควบคุมภาวะพร้อมกันคืออะไร?
การควบคุมภาวะพร้อมกัน ในระบบจัดการฐานข้อมูล คือกระบวนการจัดการการทำงานพร้อมกันโดยไม่ให้เกิดความขัดแย้งกัน กระบวนการนี้ช่วยให้มั่นใจได้ว่าการทำธุรกรรมในฐานข้อมูลจะดำเนินการพร้อมกันและถูกต้องแม่นยำ เพื่อให้ได้ผลลัพธ์ที่ถูกต้องโดยไม่ละเมิดความสมบูรณ์ของข้อมูลในฐานข้อมูลนั้นๆ
การเข้าถึงพร้อมกันนั้นค่อนข้างง่ายหากผู้ใช้ทุกคนเพียงแค่ทำการอ่านข้อมูล เนื่องจากไม่มีทางที่พวกเขาจะรบกวนซึ่งกันและกันได้ อย่างไรก็ตาม ฐานข้อมูลที่ใช้งานจริงนั้นมีการผสมผสานระหว่างการอ่านและการเขียนข้อมูล ดังนั้นการเข้าถึงพร้อมกันจึงกลายเป็นความท้าทาย
การควบคุมการทำงานพร้อมกันของระบบจัดการฐานข้อมูล (DBMS) ใช้เพื่อจัดการกับความขัดแย้งดังกล่าว ซึ่งส่วนใหญ่เกิดขึ้นในระบบที่มีผู้ใช้หลายคน ดังนั้น การควบคุมการทำงานพร้อมกันจึงเป็นหนึ่งในองค์ประกอบที่สำคัญที่สุดสำหรับการทำงานที่ถูกต้องของฐานข้อมูลที่มีธุรกรรมสองรายการขึ้นไปทำงานพร้อมกันและต้องการเข้าถึงข้อมูลเดียวกัน มันทำงานควบคู่ไปกับ... การจัดการธุรกรรมซึ่งเป็นการกำหนดหน่วยงานที่การควบคุมการทำงานพร้อมกันจะต้องแทรกแซงอย่างปลอดภัย
ปัญหาที่อาจเกิดขึ้นจากการทำงานพร้อมกัน
ต่อไปนี้คือปัญหาบางประการที่คุณอาจพบเจอหากไม่มีการควบคุมการทำงานพร้อมกันของระบบจัดการฐานข้อมูล (DBMS) อย่างเหมาะสม:
- การอัปเดตที่หายไป เกิดขึ้นเมื่อมีการทำธุรกรรมหลายรายการเลือกแถวเดียวกันและอัปเดตข้อมูลตามค่าที่เลือก
- การพึ่งพาที่ยังไม่ได้กำหนด (การอ่านข้อมูลที่ไม่ถูกต้อง) เกิดขึ้นเมื่อธุรกรรมที่สองเลือกแถวที่ได้รับการอัปเดตโดยธุรกรรมอื่นที่ยังไม่ได้ยืนยันข้อมูล
- อ่านซ้ำไม่ได้ เกิดขึ้นเมื่อธุรกรรมที่สองเข้าถึงแถวเดียวกันหลายครั้งและอ่านข้อมูลที่แตกต่างกันในแต่ละครั้ง
- สรุปไม่ถูกต้อง ข้อผิดพลาดนี้เกิดขึ้นเมื่อธุรกรรมหนึ่งทำการสรุปค่าของข้อมูลซ้ำทั้งหมด ในขณะที่ธุรกรรมที่สองทำการอัปเดตข้อมูลบางส่วน ส่งผลให้ผลลัพธ์การสรุปไม่ถูกต้อง
เหตุใดจึงต้องใช้วิธีการทำงานแบบขนาน?
เหตุผลในการใช้วิธีการควบคุมการทำงานพร้อมกันในระบบจัดการฐานข้อมูล:
- เพื่อใช้หลักการแยกธุรกรรมที่ขัดแย้งกันโดยการกีดกันซึ่งกันและกัน
- เพื่อแก้ไขปัญหาความขัดแย้งในการอ่าน-เขียน และการเขียน-เขียน
- เพื่อรักษาความสอดคล้องของฐานข้อมูลโดยการบังคับใช้ข้อจำกัดในการดำเนินการอย่างต่อเนื่อง
- เพื่อควบคุมการโต้ตอบระหว่างธุรกรรมที่เกิดขึ้นพร้อมกัน โดยใช้กลไกการควบคุมการทำงานพร้อมกัน
- เพื่อช่วยให้มั่นใจได้ถึงความสามารถในการเรียงลำดับแบบอนุกรม (serializability)
ตัวอย่าง
สมมติว่ามีคนสองคนไปที่ตู้จำหน่ายตั๋วอิเล็กทรอนิกส์พร้อมกันเพื่อซื้อตั๋วหนังเรื่องเดียวกันและรอบฉายเดียวกัน
อย่างไรก็ตาม เหลือที่นั่งว่างเพียงที่เดียวสำหรับรอบฉายนั้นในโรงภาพยนตร์ หากไม่มีการควบคุมการซื้อพร้อมกัน อาจทำให้ผู้ชมภาพยนตร์ทั้งสองคนซื้อตั๋วพร้อมกันได้ การควบคุมการซื้อพร้อมกันจะป้องกันไม่ให้เกิดเหตุการณ์เช่นนั้น ผู้ชมภาพยนตร์ทั้งสองคนยังคงสามารถเข้าถึงข้อมูลในฐานข้อมูลที่นั่งของภาพยนตร์ได้ แต่การควบคุมการซื้อพร้อมกันจะให้ตั๋วแก่ผู้ซื้อที่ทำธุรกรรมเสร็จสมบูรณ์ก่อนเท่านั้น
โปรโตคอลควบคุมการทำงานพร้อมกัน
โปรโตคอลควบคุมการทำงานพร้อมกันแบบต่างๆ มีข้อดีข้อเสียที่แตกต่างกันไป ขึ้นอยู่กับปริมาณการทำงานพร้อมกันที่อนุญาตและภาระที่เกิดขึ้น เทคนิคการควบคุมการทำงานพร้อมกันหลักๆ ในระบบจัดการฐานข้อมูล (DBMS) ได้แก่:
- โปรโตคอลแบบล็อค
- โปรโตคอลการล็อกสองเฟส
- โปรโตคอลที่อิงการประทับเวลา
- โปรโตคอลที่ใช้การตรวจสอบความถูกต้อง
แต่ละโปรโตคอลจะได้รับการพิจารณาไปทีละอย่าง โดยเริ่มจากโปรโตคอลที่ใช้กันอย่างแพร่หลายที่สุด ซึ่งใช้การล็อกเป็นหลัก
โปรโตคอลแบบล็อค
โปรโตคอลแบบล็อก ในระบบจัดการฐานข้อมูล (DBMS) มีกลไกที่กำหนดให้ธุรกรรมไม่สามารถอ่านหรือเขียนข้อมูลได้จนกว่าจะได้รับล็อกที่เหมาะสม โปรโตคอลแบบใช้ล็อกช่วยขจัดปัญหาการทำงานพร้อมกันโดยการล็อกหรือแยกข้อมูลเฉพาะรายการหนึ่งไว้สำหรับธุรกรรมเดียวเท่านั้น
ตัวล็อกคือตัวแปรข้อมูลที่เชื่อมโยงกับรายการข้อมูล ซึ่งบ่งชี้ว่าสามารถดำเนินการใดกับรายการข้อมูลนั้นได้บ้าง ตัวล็อกช่วยในการประสานการเข้าถึงรายการในฐานข้อมูลโดยธุรกรรมที่เกิดขึ้นพร้อมกัน คำขอการล็อกทั้งหมดจะถูกส่งไปยังตัวจัดการการควบคุมการทำงานพร้อมกัน และธุรกรรมจะดำเนินต่อไปได้ก็ต่อเมื่อคำขอการล็อกได้รับการอนุมัติแล้วเท่านั้น
ล็อคไบนารี: การล็อกแบบไบนารีบนรายการข้อมูลสามารถอยู่ในสถานะล็อกหรือปลดล็อกได้
ใช้งานร่วมกัน/เฉพาะกลุ่ม: กลไกการล็อกนี้จะแยกประเภทของล็อกตามการใช้งาน หากมีการล็อกเพื่อทำการเขียนข้อมูล จะเรียกว่าล็อกแบบพิเศษ (Exclusive Lock)
1. ล็อคที่ใช้ร่วมกัน (S): ล็อกแบบใช้ร่วมกันเรียกอีกอย่างว่าล็อกแบบอ่านอย่างเดียว ด้วยล็อกแบบใช้ร่วมกัน ข้อมูลสามารถใช้ร่วมกันระหว่างธุรกรรมได้ เนื่องจากไม่มีธุรกรรมใดมีสิทธิ์ในการอัปเดตข้อมูลนั้น ตัวอย่างเช่น หากมีสองธุรกรรมกำลังอ่านยอดเงินในบัญชีของบุคคลหนึ่ง ธุรกรรมหนึ่งก็จะอ่านยอดเงินในบัญชีของอีกธุรกรรมหนึ่ง ฐานข้อมูล ระบบจะอนุญาตให้ธุรกรรมอื่นอ่านข้อมูลโดยใช้การล็อกแบบใช้ร่วมกัน หากธุรกรรมอื่นต้องการอัปเดตยอดคงเหลือ การล็อกแบบใช้ร่วมกันจะป้องกันไม่ให้เกิดขึ้นจนกว่าการอ่านจะเสร็จสิ้น
2. ล็อคพิเศษ (X): ด้วยการล็อกแบบพิเศษ ข้อมูลสามารถอ่านได้เช่นเดียวกับการเขียน แต่การล็อกแบบนี้ไม่สามารถล็อกพร้อมกันได้กับข้อมูลชิ้นเดียวกัน การขอใช้ X-lock ทำได้โดยใช้คำสั่ง lock-x ตัวอย่างเช่น เมื่อธุรกรรมต้องการอัปเดตยอดคงเหลือในบัญชี การล็อกแบบ X-lock จะอนุญาตให้ทำได้ แต่ธุรกรรมที่สองที่ต้องการอ่านหรือเขียนข้อมูลเดียวกันจะถูกป้องกันไม่ให้ดำเนินการ
3. โปรโตคอลการล็อกแบบง่าย: วิธีนี้ช่วยให้ธุรกรรมสามารถล็อกข้อมูลทุกชิ้นก่อนเริ่มดำเนินการได้ ธุรกรรมสามารถปลดล็อกข้อมูลได้หลังจากเสร็จสิ้นการเขียนข้อมูลแล้ว
4. การล็อกล่วงหน้า: โปรโตคอลนี้จะประเมินการดำเนินการและสร้างรายการข้อมูลที่จำเป็นสำหรับการเริ่มต้นการดำเนินการ เมื่อได้รับสิทธิ์การล็อกทั้งหมดแล้ว ธุรกรรมจะเริ่มทำงาน และการล็อกทั้งหมดจะถูกปล่อยเมื่อการดำเนินการเสร็จสิ้น
ความอดอยาก: ภาวะอดอยาก (Starvation) คือสถานการณ์ที่ธุรกรรมต้องรอเป็นเวลานานอย่างไม่มีกำหนดเพื่อที่จะได้รับสิทธิ์ในการล็อก สาเหตุอาจมาจากระบบการรอคอยที่ไม่ดีสำหรับรายการที่ถูกล็อก การรั่วไหลของทรัพยากร หรือการเลือกธุรกรรมเดียวกันเป็นเหยื่อซ้ำๆ
ภาวะชะงักงัน: ภาวะติดตาย (Deadlock) หมายถึงสถานการณ์ที่กระบวนการตั้งแต่สองกระบวนการขึ้นไปรอให้กันและกันปล่อยทรัพยากร ทำให้เกิดเป็นวงจรต่อเนื่อง
โปรโตคอลการล็อกสองเฟส (2PL)
การขอ โปรโตคอลการล็อกสองเฟส2PL หรือที่รู้จักกันในชื่อเดียวกัน เป็นวิธีการควบคุมการทำงานพร้อมกันที่ช่วยให้มั่นใจได้ว่าการทำงานเป็นไปตามลำดับโดยการใช้ล็อกกับข้อมูลธุรกรรม ซึ่งจะป้องกันไม่ให้ธุรกรรมอื่นเข้าถึงข้อมูลเดียวกันพร้อมกันได้
โปรโตคอลการล็อกสองขั้นตอน (Two-Phase Locking) อนุญาตให้แต่ละธุรกรรมส่งคำขอล็อกหรือปลดล็อกได้ในสองขั้นตอน:
- ระยะการเจริญเติบโต: ในขั้นตอนนี้ ธุรกรรมอาจได้รับล็อก แต่ไม่สามารถปลดล็อกใดๆ ได้
- ระยะหดตัว: ในขั้นตอนนี้ ธุรกรรมอาจปลดล็อกได้ แต่อาจไม่สามารถสร้างล็อกใหม่ได้
จริงอยู่ที่ 2PL ช่วยให้สามารถเรียงลำดับการทำงานได้ แต่ก็ไม่ได้หมายความว่าจะไม่เกิดภาวะการติดตาย (deadlock) ในแผนภาพด้านบน ตัวตรวจจับการติดตายทั้งในระดับท้องถิ่นและระดับโลกจะค้นหาการติดตายและแก้ไขโดยการคืนค่าธุรกรรมกลับสู่สถานะเริ่มต้น
วิธีการล็อคแบบสองเฟสที่เข้มงวด
Strict 2PL เกือบจะเหมือนกับ 2PL ทุกประการ ความแตกต่างเพียงอย่างเดียวคือ Strict-2PL จะไม่ปล่อยล็อกหลังจากใช้งานเสร็จ มันจะถือล็อกทั้งหมดไว้จนถึงจุดยืนยัน (commit point) และปล่อยล็อกทั้งหมดพร้อมกันเมื่อกระบวนการเสร็จสิ้น
2PL แบบรวมศูนย์
ในระบบ 2PL แบบรวมศูนย์ ไซต์เดียวจะเป็นผู้รับผิดชอบกระบวนการจัดการการล็อก โดยจะมีตัวจัดการการล็อกเพียงตัวเดียวสำหรับระบบจัดการฐานข้อมูลทั้งหมด
สำเนาหลัก 2PL
ในกลไก Primary Copy 2PL นั้น ตัวจัดการการล็อกจำนวนมากจะถูกกระจายไปยังไซต์ต่างๆ และตัวจัดการการล็อกเฉพาะตัวหนึ่งจะรับผิดชอบในการจัดการการล็อกสำหรับชุดข้อมูล เมื่อสำเนาหลักได้รับการอัปเดต การเปลี่ยนแปลงจะถูกส่งต่อไปยังสำเนาสำรอง
กระจาย 2PL
ในกลไกนี้ ตัวจัดการการล็อกจะกระจายอยู่ตามไซต์ต่างๆ และมีหน้าที่รับผิดชอบในการจัดการการล็อกข้อมูลในไซต์นั้นๆ หากไม่มีการทำสำเนาข้อมูล ก็จะเทียบเท่ากับ Primary Copy 2PL ต้นทุนการสื่อสารของ Distributed 2PL นั้นสูงกว่า Primary Copy 2PL มากพอสมควร
โปรโตคอลที่อิงการประทับเวลา
การขอ โปรโตคอลแบบอิงตามเวลาประทับ ในระบบจัดการฐานข้อมูล (DBMS) มีอัลกอริทึมที่ใช้เวลาของระบบหรือตัวนับเชิงตรรกะเป็นตัวประทับเวลาเพื่อจัดลำดับการทำงานของธุรกรรมที่เกิดขึ้นพร้อมกัน วิธีนี้จะช่วยให้มั่นใจได้ว่าการดำเนินการอ่านและเขียนที่ขัดแย้งกันทุกรายการจะถูกดำเนินการตามลำดับเวลาประทับ
ในวิธีการนี้ ธุรกรรมที่เก่ากว่าจะได้รับความสำคัญเป็นอันดับแรกเสมอ โดยใช้เวลาของระบบในการกำหนดเวลาประทับของธุรกรรม และเป็นโปรโตคอลการทำงานพร้อมกันที่ใช้กันมากที่สุด โปรโตคอลแบบใช้การล็อกจะจัดการลำดับระหว่างธุรกรรมที่ขัดแย้งกันเมื่อมีการดำเนินการ ในขณะที่โปรโตคอลแบบใช้เวลาประทับจะจัดการความขัดแย้งทันทีที่สร้างการดำเนินการขึ้น
ตัวอย่าง:
Suppose there are three 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 T2 and lastly T3.
ข้อดี:
- ตารางเวลาสามารถแปลงเป็นลำดับได้ เช่นเดียวกับโปรโตคอล 2PL
- ไม่ต้องรอการทำธุรกรรม ซึ่งช่วยขจัดความเป็นไปได้ที่จะเกิดภาวะติดขัด
ข้อเสีย: อาจเกิดภาวะอดอยากได้หากมีการเริ่มต้นธุรกรรมเดิมซ้ำและยกเลิกธุรกรรมนั้นอย่างต่อเนื่อง
โปรโตคอลที่อิงตามการตรวจสอบความถูกต้อง
การขอ โปรโตคอลที่อิงตามการตรวจสอบความถูกต้อง ในระบบจัดการฐานข้อมูล (DBMS) เทคนิคการควบคุมการทำงานพร้อมกันแบบมองโลกในแง่ดี (optimistic concurrency control) เป็นวิธีการหลีกเลี่ยงความขัดแย้งในการทำงานพร้อมกันในธุรกรรม ในโปรโตคอลนี้ จะมีการอัปเดตสำเนาข้อมูลธุรกรรมในเครื่องแทนที่จะเป็นการอัปเดตข้อมูลจริง ซึ่งส่งผลให้เกิดการรบกวนน้อยลงในระหว่างการดำเนินการ
กระบวนการตรวจสอบความถูกต้องนี้ดำเนินการในสามขั้นตอน:
- อ่านเฟส.
- ขั้นตอนการตรวจสอบ
- เขียนเฟส.
อ่านเฟส.
ในขั้นตอนการอ่าน ข้อมูลจะถูกอ่านโดยธุรกรรม แต่การเขียนหรือการอัปเดตจะใช้ได้เฉพาะกับสำเนาข้อมูลในเครื่องเท่านั้น ไม่ใช่กับฐานข้อมูลจริง
ขั้นตอนการตรวจสอบ
ในขั้นตอนการตรวจสอบความถูกต้อง ข้อมูลจะถูกตรวจสอบเพื่อให้แน่ใจว่าการอัปเดตจะไม่ละเมิดคุณสมบัติการเรียงลำดับ (serializability)
เขียนเฟส.
ในขั้นตอนการเขียนข้อมูล การอัปเดตจะถูกนำไปใช้กับฐานข้อมูลหากการตรวจสอบความถูกต้องสำเร็จ มิเช่นนั้นการอัปเดตจะถูกยกเลิกและธุรกรรมจะถูกย้อนกลับ
การเปรียบเทียบโปรโตคอลควบคุมการทำงานพร้อมกัน
โปรโตคอลทั้งสี่ตระกูลมีการคาดการณ์ที่แตกต่างกันเกี่ยวกับความถี่ในการเกิดข้อขัดแย้งในการทำธุรกรรม ตารางด้านล่างสรุปว่าแต่ละตระกูลอยู่ในตำแหน่งใด
| โปรโตคอล | เข้าใกล้ | การหยุดชะงัก | ดีที่สุดเมื่อ |
|---|---|---|---|
| ล็อกแบบใช้กุญแจ | มองโลกในแง่ร้าย ล็อกประตูก่อนเข้าใช้งาน | เป็นไปได้ | ความขัดแย้งเกิดขึ้นบ่อยครั้ง |
| การล็อกสองเฟส | ช่วงเวลาแห่งการมองโลกในแง่ร้าย การเติบโต และการหดตัว | เป็นไปได้ | จำเป็นต้องมีคุณสมบัติการทำให้เป็นอนุกรม (Serializability) |
| อิงตามการประทับเวลา | ลำดับตามเวลา | ปราศจากภาวะชะงักงัน | ลำดับขั้นตอนสำคัญ การรอคอยนั้นสิ้นเปลือง |
| อิงตามการตรวจสอบความถูกต้อง | มองโลกในแง่ดี ตรวจสอบความถูกต้องก่อนเขียน | ปราศจากภาวะชะงักงัน | ความขัดแย้งเกิดขึ้นไม่บ่อยนัก |
โดยสรุป โปรโตคอลแบบล็อกและ 2PL ถือว่าความขัดแย้งเป็นเรื่องปกติและป้องกันไว้ตั้งแต่ต้น ในขณะที่โปรโตคอลแบบประทับเวลาและการตรวจสอบความถูกต้องถือว่าความขัดแย้งเกิดขึ้นได้ยากและแก้ไขเฉพาะเมื่อเกิดขึ้นเท่านั้น
คุณลักษณะของโปรโตคอลการทำงานพร้อมกันที่ดี
กลไกควบคุมการทำงานพร้อมกันในอุดมคติควรมีวัตถุประสงค์ดังต่อไปนี้:
- ระบบจะต้องมีความยืดหยุ่นต่อความล้มเหลวของเว็บไซต์และการสื่อสาร
- ช่วยให้การทำธุรกรรมแบบขนานเพื่อให้บรรลุพร้อมกันสูงสุด
- กลไกการจัดเก็บและวิธีการคำนวณควรมีขนาดพอประมาณเพื่อลดค่าใช้จ่ายให้เหลือน้อยที่สุด
- จำเป็นต้องกำหนดข้อจำกัดบางประการเกี่ยวกับโครงสร้างของการกระทำพื้นฐานของการทำธุรกรรม

