ScholarGate
ผู้ช่วย

ระดับการแยก (Isolation Levels)

ระดับการแยก (Isolation levels) กำหนดว่าธุรกรรมหนึ่งจะได้รับการป้องกันจากผลกระทบของธุรกรรมอื่นที่เกิดขึ้นพร้อมกันมากน้อยเพียงใด โดยแลกเปลี่ยนการรับประกันการแยกบางส่วนกับการเพิ่มความพร้อมกัน (concurrency) และปริมาณงาน (throughput) ที่สูงขึ้น

ค้นหาหัวข้อด้วย PaperMindเร็ว ๆ นี้Find papers & topics
Tools & resources
ดาวน์โหลดสไลด์
Learn & explore
วิดีโอเร็ว ๆ นี้

Definition

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

Scope

หัวข้อนี้ครอบคลุมระดับการแยกมาตรฐาน ได้แก่ read uncommitted, read committed, repeatable read และ serializable ซึ่งกำหนดโดยปรากฏการณ์ (dirty read, non-repeatable read, phantom) ที่แต่ละระดับอนุญาตหรือป้องกัน รวมถึงการวิพากษ์วิจารณ์ที่มีอิทธิพลซึ่งได้ปรับกรอบแนวคิดเหล่านี้ในแง่ของความผิดปกติที่อนุญาต และ snapshot isolation ที่มีความสำคัญในทางปฏิบัติและความผิดปกติของมัน เช่น write skew นอกจากนี้ยังกล่าวถึงการแลกเปลี่ยนระหว่างความสอดคล้อง (consistency) และความพร้อมกัน (concurrency) โดยไม่รวมกลไกการล็อก (locking) และ multiversion ที่ใช้ในการนำระดับเหล่านี้ไปปฏิบัติ

Core questions

  • ความผิดปกติใดบ้าง — dirty read, non-repeatable read, phantom — ที่แต่ละระดับการแยกอนุญาต?
  • มาตรฐาน SQL กำหนดระดับการแยกทั้งสี่อย่างไร?
  • เหตุใดนักวิจัยจึงวิพากษ์วิจารณ์คำจำกัดความที่อิงตามความผิดปกติว่ากำกวม?
  • snapshot isolation อยู่ในตำแหน่งใด และความผิดปกติใดบ้าง (เช่น write skew) ที่อาจอนุญาต?
  • แอปพลิเคชันจะเลือกระดับการแยกสำหรับปริมาณงานที่กำหนดได้อย่างไร?

Key concepts

  • read uncommitted
  • read committed
  • repeatable read
  • serializable
  • dirty read
  • non-repeatable read
  • phantom read
  • snapshot isolation และ write skew

Key theories

ระดับการแยกที่อิงตามความผิดปกติ
มาตรฐาน SQL กำหนดระดับการแยกโดยพิจารณาจากปรากฏการณ์สามอย่าง — dirty reads, non-repeatable reads และ phantoms — ที่อนุญาต โดยมีตั้งแต่ read uncommitted (อนุญาตทั้งหมด) ไปจนถึง serializable (ไม่อนุญาตเลย)
การวิพากษ์วิจารณ์ระดับการแยกของ ANSI
Berenson และคณะได้แสดงให้เห็นว่าคำจำกัดความที่อิงตามปรากฏการณ์ของมาตรฐานนั้นกำกวมและไม่สามารถอธิบายระบบ multiversion ได้อย่างชัดเจน และพวกเขาได้นำเสนอ snapshot isolation ในฐานะระดับที่แตกต่างและมีการนำไปใช้อย่างแพร่หลายซึ่งไม่ถูกครอบคลุมโดยคำจำกัดความดั้งเดิม
Snapshot isolation และความผิดปกติของมัน
ภายใต้ snapshot isolation แต่ละธุรกรรมจะอ่าน snapshot ที่สอดคล้องกัน ณ เวลาเริ่มต้น ทำให้ได้พฤติกรรมการอ่านที่แข็งแกร่งโดยไม่มีการล็อกการอ่าน แต่ก็สามารถอนุญาตให้เกิดความผิดปกติที่ไม่เป็น serializable ได้ เช่น write skew ซึ่งเป็นแรงจูงใจให้เกิด serializable snapshot isolation

Clinical relevance

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

History

มาตรฐาน ANSI/ISO SQL ได้กำหนดระดับการแยกในแง่ของปรากฏการณ์ที่อนุญาต การวิพากษ์วิจารณ์ในปี 1995 โดย Berenson, Bernstein, Gray และ O'Neils ได้เปิดเผยความกำกวมในการนิยามเหล่านั้น และได้อธิบายถึง snapshot isolation ซึ่งฐานข้อมูล multiversion กระแสหลักได้นำมาใช้ งานวิจัยในภายหลังได้กำหนด serializable snapshot isolation เพื่อปิดช่องว่างความผิดปกติที่เหลืออยู่

Debates

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

Key figures

  • Jim Gray
  • Philip Bernstein
  • Hal Berenson

Related topics

Seminal works

  • berenson1995
  • gray1992

Frequently asked questions

ความแตกต่างระหว่าง non-repeatable read และ phantom read คืออะไร?
non-repeatable read เกิดขึ้นเมื่อธุรกรรมอ่านแถวเดียวกันสองครั้งและเห็นค่าที่แตกต่างกันเนื่องจากธุรกรรมอื่นได้อัปเดตไปแล้วในระหว่างนั้น ส่วน phantom read เกิดขึ้นเมื่อธุรกรรมเรียกใช้คิวรีซ้ำด้วยเงื่อนไขการค้นหาและเห็นแถวใหม่ที่ธุรกรรมอื่นได้แทรกเข้าไป repeatable read จะป้องกันแบบแรก ส่วน serializable เท่านั้นที่ป้องกัน phantoms ได้อย่างน่าเชื่อถือ
snapshot isolation เหมือนกับ serializable หรือไม่?
ไม่เหมือนกัน snapshot isolation ให้แต่ละธุรกรรมมี snapshot ที่สอดคล้องกันและป้องกัน dirty read และ non-repeatable read แต่ไม่เป็น serializable อย่างสมบูรณ์: มันอนุญาตให้เกิดความผิดปกติแบบ write-skew ซึ่งธุรกรรมสองรายการอ่านข้อมูลที่ทับซ้อนกันและทำการอัปเดตที่ไม่เกี่ยวข้องกันซึ่งรวมกันแล้วละเมิดข้อจำกัด serializable snapshot isolation ได้รับการขยายเพื่อกำจัดความผิดปกติเหล่านั้น

Methods for this concept

Related concepts