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

การหยุดชะงักใน DBMS


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

ในไดอะแกรมด้านบน กระบวนการ 1 มีทรัพยากร 1 และต้องการทรัพยากร 2 ในทำนองเดียวกัน กระบวนการ 2 มีทรัพยากร 2 และต้องการทรัพยากร 1 กระบวนการเหล่านี้แต่ละกระบวนการต้องการทรัพยากรของอีกกระบวนการหนึ่งจึงจะเสร็จสมบูรณ์ แต่ไม่มีกระบวนการใดที่เต็มใจละทิ้งทรัพยากร ดังนั้น กระบวนการที่ 1 และกระบวนการที่ 2 อยู่ในภาวะชะงักงัน

เงื่อนไขคอฟฟ์แมน

การหยุดชะงักจะเกิดขึ้นก็ต่อเมื่อเงื่อนไขทั้งสี่ของ Coffman เป็นจริง เงื่อนไขเหล่านี้ไม่จำเป็นต้องแยกจากกัน คือ:

การยกเว้นร่วมกัน

ควรมีทรัพยากรที่สามารถจัดขึ้นได้ครั้งละหนึ่งกระบวนการเท่านั้น ในแผนภาพด้านล่าง มีอินสแตนซ์ของทรัพยากร R1 เพียงตัวเดียวและถูกเก็บไว้โดยกระบวนการ P1 เท่านั้น

การหยุดชะงักใน DBMS

กดค้างไว้และรอ

กระบวนการสามารถเก็บทรัพยากรได้หลายรายการและยังขอทรัพยากรเพิ่มเติมจากกระบวนการอื่นที่ถืออยู่ ในแผนภาพด้านล่าง กระบวนการ P1 จะเก็บทรัพยากร R1 และ R2 และกำลังขอทรัพยากร R3 ซึ่งถือโดยกระบวนการ P2

การหยุดชะงักใน DBMS

ไม่มีการสำรอง

ทรัพยากรไม่สามารถยึดไว้จากกระบวนการด้วยกำลัง กระบวนการสามารถปล่อยทรัพยากรโดยสมัครใจเท่านั้น ในไดอะแกรมด้านล่าง กระบวนการ P1 ไม่สามารถยึดทรัพยากร R3 จากกระบวนการ P2 ได้ โดยจะปล่อยออกมาก็ต่อเมื่อ P2 สละสิทธิ์โดยสมัครใจหลังจากการดำเนินการเสร็จสิ้น

การหยุดชะงักใน DBMS

รอเป็นวงกลม

กระบวนการกำลังรอทรัพยากรที่ถือโดยกระบวนการที่สอง ซึ่งกำลังรอทรัพยากรที่ถือโดยกระบวนการที่สาม และต่อๆ ไป จนกว่ากระบวนการสุดท้ายจะรอทรัพยากรที่ถือโดยกระบวนการแรก นี้รูปแบบห่วงโซ่วงกลม ตัวอย่างเช่น:กระบวนการ P1 ถูกจัดสรรทรัพยากร R1 และกำลังร้องขอทรัพยากร R2 ในทำนองเดียวกัน กระบวนการ P2 จะได้รับการจัดสรรทรัพยากร R2 และกำลังร้องขอทรัพยากร R1 รูปแบบนี้จะวนเป็นวงกลม

กระบวนการกำลังรอทรัพยากรที่ถือโดยกระบวนการที่สอง ซึ่งกำลังรอทรัพยากรที่ถือโดยกระบวนการที่สาม และต่อๆ ไป จนกว่ากระบวนการสุดท้ายจะรอทรัพยากรที่ถือโดยกระบวนการแรก นี้รูปแบบห่วงโซ่วงกลม ตัวอย่างเช่น:กระบวนการ P1 ถูกจัดสรรทรัพยากร R1 และกำลังร้องขอทรัพยากร R2 ในทำนองเดียวกัน กระบวนการ P2 จะได้รับการจัดสรรทรัพยากร R2 และกำลังร้องขอทรัพยากร R1 รูปแบบนี้จะวนเป็นวงกลม

การหยุดชะงักใน DBMS

การตรวจจับการหยุดชะงัก

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

  • กระบวนการทั้งหมดที่เกี่ยวข้องกับการหยุดชะงักจะสิ้นสุดลง นี่ไม่ใช่แนวทางที่ดีเนื่องจากความคืบหน้าทั้งหมดของกระบวนการจะถูกทำลายลง
  • ทรัพยากรสามารถถูกยึดไว้จากกระบวนการบางอย่างและมอบให้กับผู้อื่นได้จนกว่าการหยุดชะงักจะได้รับการแก้ไข

การป้องกันการหยุดชะงัก

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

มีแผนการป้องกันการชะงักงันบางอย่างที่ใช้การประทับเวลาเพื่อให้แน่ใจว่าจะไม่เกิดการชะงักงัน เหล่านี้คือ −

  • รอ - แผนตาย

    ในรูปแบบการรอ ถ้าธุรกรรม T1 ร้องขอทรัพยากรที่ถือโดยธุรกรรม T2 อาจเกิดหนึ่งในสองกรณีต่อไปนี้:

    • TS(T1)
    • TS(T1)> TS(T2) - ถ้า T1 น้อยกว่า T2 เช่น T1 เข้ามาในระบบหลังจาก T2 ดังนั้น T1 จะถูกฆ่า จะเริ่มต้นใหม่ในภายหลังด้วยการประทับเวลาเดิม

  • บาดแผล - แผนรอ

    ในรูปแบบ Wound - wait หากธุรกรรม T1 ร้องขอทรัพยากรที่ถือโดยธุรกรรม T2 อาจเกิดหนึ่งในสองกรณีต่อไปนี้:

    • TS(T1)
    • TS(T1)> TS(T2) - หาก T1 อายุน้อยกว่า T2 เช่น T1 เข้ามาในระบบหลังจาก T2 จะได้รับอนุญาตให้รอทรัพยากรที่จะว่างเมื่อ T2 ดำเนินการเสร็จสิ้น

การหลีกเลี่ยงภาวะชะงักงัน

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

รอกราฟ

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

การหยุดชะงักใน DBMS

ละเว้นการหยุดชะงัก - อัลกอริธึมนกกระจอกเทศ

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