การจัดการธุรกรรมในระบบจัดการฐานข้อมูล: สถานะ ประเภท และ ACID

⚡ สรุปอย่างชาญฉลาด

การจัดการธุรกรรมฐานข้อมูล (Database Transaction Management) จะมองการดำเนินการฐานข้อมูลหนึ่งรายการหรือมากกว่านั้นเป็นหน่วยตรรกะเดียวที่เปลี่ยนสถานะความสอดคล้องของฐานข้อมูลจากสถานะหนึ่งไปยังอีกสถานะหนึ่ง โดยอาศัยคุณสมบัติ ACID สถานะธุรกรรมที่กำหนดไว้ และตารางเวลาเพื่อให้การเข้าถึงพร้อมกันเป็นไปอย่างถูกต้อง

  • 🔁 หน่วยหลัก: ธุรกรรมจะรวมการดำเนินการอ่านและเขียนที่เกี่ยวข้องกันเข้าด้วยกัน เพื่อให้การดำเนินการสำเร็จหรือล้มเหลวพร้อมกัน ไม่ใช่ล้มเหลวแบบครึ่งๆ กลางๆ
  • 🧪 คุณสมบัติของกรด: Atomความเป็นกรดด่าง ความสม่ำเสมอ การแยกส่วน และความทนทาน รับประกันผลลัพธ์ที่ถูกต้องแม้ในสภาวะที่เกิดความล้มเหลวหรือการทำงานพร้อมกัน
  • 🚦 สถานะการทำธุรกรรม: สถานะต่างๆ เช่น กำลังดำเนินการ ดำเนินการบางส่วน ดำเนินการเสร็จสิ้น ล้มเหลว และยุติลง อธิบายถึงวงจรชีวิตของธุรกรรม
  • 👥 เหตุผลที่ต้องใช้การทำงานพร้อมกัน: ฐานข้อมูลเป็นแบบใช้ร่วมกัน ดังนั้นจึงมีการทำธุรกรรมจำนวนมากพร้อมกัน และต้องไม่ทำให้ข้อมูลของกันและกันเสียหาย
  • 📋 ตาราง: ตารางกำหนดลำดับการทำงานของธุรกรรมคู่ขนาน โดยยังคงรักษาลำดับภายในของแต่ละธุรกรรมไว้
  • 🔗 ความสามารถในการเรียงลำดับ: ตารางการทำงานแบบขนานจะถูกต้องเมื่อผลลัพธ์เท่ากับการทำงานแบบอนุกรมบางอย่าง โดยพิจารณาจากความขัดแย้งหรือความเท่าเทียมกันของมุมมอง
  • ↩️ การกู้คืน: ธุรกรรมที่ล้มเหลวจะถูกยกเลิก ทำให้ข้อมูลที่เขียนไปบางส่วนไม่ถึงฐานข้อมูลที่ได้รับการยืนยันแล้ว

การจัดการธุรกรรมในระบบจัดการฐานข้อมูล (DBMS)

ธุรกรรมฐานข้อมูลคืออะไร?

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

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

การทำธุรกรรมฐานข้อมูลที่เคลื่อนย้ายระหว่างสถานะที่สอดคล้องกัน
ธุรกรรมฐานข้อมูล

ข้อเท็จจริงเกี่ยวกับการทำธุรกรรมในฐานข้อมูล

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

เหตุใดจึงจำเป็นต้องมีการทำงานพร้อมกันในธุรกรรม?

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

การไม่จัดการการเข้าถึงพร้อมกันอาจทำให้เกิดปัญหาเช่น:

  • ฮาร์ดแวร์ขัดข้องและระบบล่ม
  • การทำธุรกรรมเดียวกันพร้อมกัน การหยุดชะงักหรือประสิทธิภาพการทำงานช้า

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

สถานะของการทำธุรกรรม

สถานะต่างๆ ของแนวคิดธุรกรรมใน DBMS มีดังต่อไปนี้:

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

แผนภาพการเปลี่ยนสถานะสำหรับธุรกรรมฐานข้อมูล

เรามาศึกษาเรื่องนี้กันเถอะ แผนภาพการเปลี่ยนสถานะ ที่เน้นย้ำถึงการเคลื่อนย้ายธุรกรรมระหว่างรัฐต่างๆ เหล่านี้

  1. เมื่อธุรกรรมเริ่มดำเนินการแล้ว ธุรกรรมนั้นจะอยู่ในสถานะพร้อมใช้งาน และสามารถออกคำสั่งอ่านหรือเขียนได้
  2. เมื่อการดำเนินการอ่านและเขียนเสร็จสมบูรณ์ ธุรกรรมจะเข้าสู่สถานะยืนยันบางส่วน (partially committed)
  3. ต่อไป โปรโตคอลการกู้คืนบางอย่างจำเป็นต้องตรวจสอบให้แน่ใจว่าความล้มเหลวของระบบจะไม่ส่งผลให้ไม่สามารถบันทึกการเปลี่ยนแปลงของธุรกรรมได้อย่างถาวร หากการตรวจสอบนี้สำเร็จ ธุรกรรมจะได้รับการยืนยันและเข้าสู่สถานะที่ยืนยันแล้ว
  4. หากการตรวจสอบล้มเหลว ธุรกรรมจะเปลี่ยนสถานะเป็นล้มเหลว
  5. หากธุรกรรมถูกยกเลิกขณะที่อยู่ในสถานะใช้งาน ธุรกรรมจะเปลี่ยนเป็นสถานะล้มเหลว จำเป็นต้องย้อนกลับธุรกรรมเพื่อยกเลิกผลกระทบของการเขียนข้อมูลลงในฐานข้อมูล
  6. สถานะที่สิ้นสุดหมายถึงธุรกรรมที่ออกจากระบบ

คุณสมบัติของกรดคืออะไร?

คุณสมบัติของกรด ใช้เพื่อรักษาความสมบูรณ์ของฐานข้อมูลในระหว่างการประมวลผลธุรกรรม ACID ใน DBMS ย่อมาจาก... Aความโหดเหี้ยม, Cความมั่นคง, Iปลอบใจและ Dความทนทาน

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

คุณสมบัติ ACID ในระบบจัดการฐานข้อมูล พร้อมตัวอย่าง

ด้านล่างนี้คือตัวอย่างของคุณสมบัติ ACID ในระบบจัดการฐานข้อมูล (DBMS):

Transaction 1: Begin X=X+50, Y = Y-50 END
Transaction 2: Begin X=1.1*X, Y=1.1*Y END

ธุรกรรมที่ 1 กำลังโอนเงิน $50 จากบัญชี X ไปยังบัญชี Y

ธุรกรรมที่ 2 จะให้เครดิตแต่ละบัญชีพร้อมดอกเบี้ย 10%

หากส่งธุรกรรมทั้งสองพร้อมกัน ไม่มีหลักประกันว่าธุรกรรมที่ 1 จะดำเนินการก่อนธุรกรรมที่ 2 หรือในทางกลับกัน ไม่ว่าลำดับจะเป็นอย่างไร ผลลัพธ์จะต้องเป็นเสมือนว่าธุรกรรมเกิดขึ้นตามลำดับทีละรายการ

ประเภทของธุรกรรม

แบ่งตามสาขาการใช้งาน:

  • แบบไม่กระจายเทียบกับแบบกระจาย
  • ธุรกรรมชดเชย
  • ระยะเวลาในการทำธุรกรรม
  • การประมวลผลแบบออนไลน์เทียบกับการประมวลผลแบบกลุ่ม

อ้างอิงจากพฤติกรรม:

  • สองขั้นตอน
  • ถูกจำกัด.
  • แบบจำลองการกระทำ

พิจารณาจากโครงสร้าง:

  • ธุรกรรมแบบเรียบง่ายหรือแบบพื้นฐาน: ประกอบด้วยลำดับของการดำเนินการขั้นพื้นฐานที่ดำเนินการระหว่างคำสั่งเริ่มต้นและคำสั่งสิ้นสุด
  • ธุรกรรมซ้อน: ธุรกรรมที่ประกอบด้วยธุรกรรมอื่น ๆ
  • ขั้นตอนการทำงาน

กำหนดการคืออะไร?

การจัดตารางเวลาคือกระบวนการสร้างกลุ่มธุรกรรมแบบขนานหลายรายการและดำเนินการทีละรายการ โดยต้องรักษาลำดับของคำสั่งที่ปรากฏในแต่ละธุรกรรม หากมีการดำเนินการสองธุรกรรมพร้อมกัน ผลลัพธ์ของธุรกรรมหนึ่งอาจส่งผลต่อผลลัพธ์ของอีกธุรกรรมหนึ่ง

ตัวอย่าง

Initial Product Quantity is 10
Transaction 1: Update Product Quantity to 50
Transaction 2: Read Product Quantity

หากมีการดำเนินการธุรกรรม 2 ก่อนธุรกรรม 1 ข้อมูลที่ล้าสมัยเกี่ยวกับปริมาณผลิตภัณฑ์จะถูกอ่าน ดังนั้นจึงจำเป็นต้องมีกำหนดการ

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

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

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

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

ความสามารถในการทำให้เป็นอนุกรมคืออะไร?

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

  • ความสามารถในการเรียงลำดับความขัดแย้ง
  • ดูคุณสมบัติการทำให้เป็นอนุกรม (Serializability)

ทั้งสองแนวทางมีความแตกต่างกันในวิธีการพิจารณาความเท่าเทียมกันอย่างเคร่งครัด ดังที่สรุปไว้ด้านล่าง

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

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

คำถามที่พบบ่อย

คำสั่ง Commit จะบันทึกการเปลี่ยนแปลงของธุรกรรมลงในฐานข้อมูลอย่างถาวร ส่วนคำสั่ง Rollback จะยกเลิกการเปลี่ยนแปลงทั้งหมดตั้งแต่เริ่มธุรกรรม ทำให้ฐานข้อมูลกลับสู่สถานะที่สอดคล้องกันก่อนเริ่มธุรกรรม

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

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

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

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

สรุปโพสต์นี้ด้วย: