การจัดการธุรกรรมและการทำงานพร้อมกัน
การจัดการธุรกรรมและการควบคุมการทำงานพร้อมกันช่วยให้ฐานข้อมูลสามารถดำเนินการธุรกรรมพร้อมกันจำนวนมากได้อย่างถูกต้องและอยู่รอดจากความล้มเหลว โดยรับประกันคุณสมบัติความเป็นอะตอมมิค (atomicity), ความสอดคล้อง (consistency), การแยกจากกัน (isolation) และความคงทน (durability) (ACID)
Definition
ธุรกรรมคือลำดับของการดำเนินการฐานข้อมูลที่ถูกดำเนินการเป็นหน่วยตรรกะเดียวซึ่งเป็นอะตอมมิค รักษาความสอดคล้อง แยกจากธุรกรรมที่ทำงานพร้อมกัน และคงทนเมื่อคอมมิตแล้ว; การจัดการธุรกรรมคือชุดของกลไกที่บังคับใช้คุณสมบัติเหล่านี้ภายใต้การทำงานพร้อมกันและความล้มเหลว
Scope
ขอบเขตนี้ครอบคลุมธุรกรรมในฐานะหน่วยของงานและกลไกที่ทำให้การดำเนินการพร้อมกันที่อาจเกิดความล้มเหลวเป็นไปอย่างถูกต้อง: คุณสมบัติ ACID; ความสามารถในการจัดลำดับ (serializability) ในฐานะเกณฑ์ความถูกต้องสำหรับการทำงานพร้อมกัน; โปรโตคอลการล็อก (locking), การประทับเวลา (timestamp) และหลายเวอร์ชัน (multiversion) ที่บังคับใช้; ระดับการแยกจากกันที่อ่อนแอลงซึ่งแลกเปลี่ยนความสอดคล้องกับประสิทธิภาพ; และเทคนิคการบันทึก (logging) และการกู้คืน (recovery) ที่รับรองความเป็นอะตอมมิคและความคงทนเมื่อเกิดข้อขัดข้อง ไม่รวมถึงการคอมมิตแบบกระจาย (distributed commit) ข้ามหลายไซต์ ซึ่งจะกล่าวถึงในส่วนของฐานข้อมูลแบบกระจายและแบบขนาน
Sub-topics
Core questions
- คุณสมบัติ ACID รับประกันอะไรและทำไมจึงจำเป็น?
- อะไรที่ทำให้กำหนดการทำงานพร้อมกันถูกต้อง หรือก็คือสามารถจัดลำดับได้?
- โปรโตคอลการล็อก, การประทับเวลา และหลายเวอร์ชันบังคับใช้ความสามารถในการจัดลำดับได้อย่างไร?
- การบันทึกและการกู้คืนจะกู้คืนสถานะที่สอดคล้องกันหลังจากข้อขัดข้องได้อย่างไร?
- ระดับการแยกจากกันที่อ่อนแอลงแลกเปลี่ยนความสอดคล้องกับการทำงานพร้อมกันได้อย่างไร?
Key concepts
- ธุรกรรมและการคอมมิต/ยกเลิก
- คุณสมบัติ ACID
- ความสามารถในการจัดลำดับและกราฟลำดับความสำคัญ
- การล็อกสองเฟส
- การเรียงลำดับตามการประทับเวลา
- การควบคุมการทำงานพร้อมกันแบบหลายเวอร์ชัน
- การตรวจจับและการป้องกันภาวะชะงักงัน
- การบันทึกแบบเขียนล่วงหน้า
- ระดับการแยกจากกัน
Key theories
- คุณสมบัติ ACID
- ความเป็นอะตอมมิค (การดำเนินการแบบทั้งหมดหรือไม่มีเลย), ความสอดคล้อง (การรักษาข้อจำกัดความสมบูรณ์), การแยกจากกัน (ธุรกรรมที่ทำงานพร้อมกันดูเหมือนจะทำงานเพียงลำพัง) และความคงทน (ผลลัพธ์ที่คอมมิตแล้วอยู่รอดจากความล้มเหลว) ร่วมกันกำหนดพฤติกรรมธุรกรรมที่ถูกต้อง
- ความสามารถในการจัดลำดับ
- กำหนดการทำงานพร้อมกันจะถูกต้องหากเทียบเท่ากับการดำเนินการแบบอนุกรมบางอย่าง; ความสามารถในการจัดลำดับความขัดแย้ง ซึ่งทดสอบผ่านกราฟลำดับความสำคัญ (serialization graph) เป็นเกณฑ์ปฏิบัติที่โปรโตคอลควบคุมการทำงานพร้อมกันบังคับใช้
- การควบคุมการทำงานพร้อมกันและการกู้คืน
- วิธีการล็อก, การเรียงลำดับตามการประทับเวลา และหลายเวอร์ชันป้องกันการสลับการทำงานที่ไม่สามารถจัดลำดับได้ ในขณะที่การบันทึกแบบเขียนล่วงหน้าและอัลกอริทึมการกู้คืนรับประกันความเป็นอะตอมมิคและความคงทน ซึ่งเป็นสองส่วนของการประมวลผลธุรกรรมที่ถูกต้อง
Clinical relevance
การจัดการธุรกรรมคือสิ่งที่ทำให้ฐานข้อมูลน่าเชื่อถือสำหรับเงินและบันทึก: มันรับประกันว่าการโอนเงินผ่านธนาคารจะไม่เคยหักบัญชีหนึ่งโดยไม่เครดิตอีกบัญชีหนึ่ง ว่าสายการบินจะไม่เคยจองที่นั่งซ้ำซ้อนภายใต้คำขอพร้อมกัน และข้อมูลที่คอมมิตแล้วจะอยู่รอดจากข้อขัดข้อง ซึ่งเป็นรากฐานของระบบธุรกรรมที่เชื่อถือได้ทั้งหมด
History
แนวคิดธุรกรรมและคุณสมบัติ ACID ได้รับการกำหนดอย่างเป็นทางการที่ IBM's System R ในทศวรรษ 1970; Eswaran และคณะ (1976) ได้กำหนดแนวคิดความสอดคล้องและการล็อก, Jim Gray ได้นิยามธุรกรรมและการกู้คืน, และ Bernstein, Hadzilacos, และ Goodman (1987) ได้จัดระบบทฤษฎีความสามารถในการจัดลำดับ การมีส่วนร่วมของ Gray ในการประมวลผลธุรกรรมทำให้เขาได้รับรางวัล Turing Award
Key figures
- Jim Gray
- Philip Bernstein
- Andreas Reuter
Related topics
Seminal works
- gray1992
- bernstein1987
- eswaran1976
Frequently asked questions
- การที่กำหนดการของธุรกรรมสามารถจัดลำดับได้หมายความว่าอย่างไร?
- กำหนดการทำงานพร้อมกันจะสามารถจัดลำดับได้หากผลลัพธ์โดยรวมเหมือนกับการรันธุรกรรมเดียวกันทีละรายการตามลำดับใดลำดับหนึ่ง ความสามารถในการจัดลำดับเป็นเกณฑ์ความถูกต้องมาตรฐานทองคำ: แม้ว่าธุรกรรมจะสลับการทำงานเพื่อประสิทธิภาพ แต่ผลลัพธ์ก็เหมือนกับว่าได้ดำเนินการแบบอนุกรม ดังนั้นจึงไม่มีธุรกรรมใดเห็นสถานะกลางที่ไม่สอดคล้องกัน
- ทำไมจึงอนุญาตให้มีระดับการแยกจากกันที่อ่อนแอลงได้ หากอาจทำให้เกิดความผิดปกติ?
- การบังคับใช้ความสามารถในการจัดลำดับอย่างเต็มที่นั้นมีค่าใช้จ่ายด้านประสิทธิภาพในการแย่งชิงการล็อกและการยกเลิก แอปพลิเคชันจำนวนมากสามารถทนต่อความผิดปกติบางอย่างได้เพื่อแลกกับความสามารถในการทำงานพร้อมกันที่สูงขึ้น ดังนั้นมาตรฐาน SQL จึงกำหนดระดับการแยกจากกันที่อ่อนแอลง (อ่านที่คอมมิตแล้ว, อ่านซ้ำได้ และอื่นๆ) ซึ่งช่วยให้นักพัฒนาสามารถแลกเปลี่ยนการแยกจากกันบางส่วนกับปริมาณงานได้โดยเจตนา