Transaction Management

Transaction Management

  • นิยามทั่วไป
  • – Transaction เป็นหน่วยของ Program execution ที่เข้าถึง various data items หรือ เป็นแหล่งรวมของคำสั่งที่รวมเป็นหน่วยเดียว (single of work) โดยต้องทำงานให้เสร็จทั้งก้อน ถ้ามีการรบกวนจะมีการ undo ฐานข้อมูลกลับทันที

    – Transaction Program หมายถึงโปรแกรมที่ทำการอัพเดตข้อมูลในระบบฐานข้อมูลและ DBMS  โดยต้องรับประกันว่าเมื่อ transaction ทำงานเสร็จแล้วจะต้องทำให้ข้อมูลอยู่ในสภาพสมบูรณ์ถูกต้อง (ในที่นี้จะขอเรียก Transaction Program ว่า Transaction)

  • Architecture of TPS Application
  • transaction_1.jpg

  • Transaction State
  • transaction_2.jpg

    1. Active คือสถานะเริ่มต้นการทำงานของ Transaction

    2. Partially Committed คือสถานะที่แต่ละการกระทำของ Transaction ทำงานเสร็จ

    3. Commited คือสถานะที่ Transaction ทำงานเสร็จสมบูรณ์

    4. Failed คือสถานะที่มีข้อผิดพลาดเกิดขึ้นกับ Transaction นั้น

    5. Aborted คือ สถานะที่เกิดขึ้นหลังจากที่เกิดสถานะ Failed เพื่อหยุดการทำงานของ Transaction ถ้าอยู่ที่ Aborted State แล้ว Transaction manager จะทำการ undo ค่ากลับ โดยจะเรียก Transaction นั้นว่า roll back

  • Transactions access data using two operations
  • 1. read(X) :  ทำการส่งค่า data item X จากฐานข้อมูลเข้าสู่ local buffering

    2. write(x) : ในระบบฐานข้อมูลจริงๆ คำสั่ง write จะไม่เกิดผลในดิสก์โดยทันที แต่ว่าค่าที่เปลี่ยนแปลงไปแล้วอาจจะอยู่ใน temp ในหน่วยความจำ แล้วค่อย execute ใส่ดิสก์ภายหลัง แต่ตอนนี้ขอสมมุตว่าคำสั่ง write จะทำการอัพเดตฐานข้อมูลทันที

  • Transaction Concepts
  • โดยปกติแล้ว transaction จะถูกเริ่มต้นโดยเขียนด้วย High-level DML โดยจะมีคำสั่ง begintrans เป็นคำสั่งเริ่มต้น และจบด้วยคำสั่ง endtrans หรือ committrans โดยระหว่างคำสั่งเริ่มและจบจะเป็นคำสั่งซึ่งถือว่าเป็น Atomic ดังนั้นเพื่อที่จะรับประกันความถูกต้องของข้อมูล DBMS จะต้องรักษาสภาพความถูกต้องของคุณสมบัติ ACID ของ transaction นั้นๆด้วย

  • ACID Properties
  • Atomicity : ถ้า transactions เริ่มดำเนินการ ต้องดำเนินไปจนลุล่วงหมดทุกคำสั่ง หรือถ้าดำเนินการไม่สำเร็จลุล่วง     transactions  จะต้องทำให้ฐานข้อมูลดูเสมือนหนึ่งว่าไม่เคยมีการกระทำใด ๆ เกิดขึ้นเลย transactions ต้องถูก roll back กลับไปตั้งต้นไปการ commit หรือ roll back  นี้จะถูกดำเนินการโดย transaction-management manager

    Consistency : DBMS ต้องรับประกันความถูกต้องของข้อมูลในระบบฐานข้อมูลอยู่เสมอ ไม่ว่าก่อน หรือหลังการประมวลผลของ transaction  การรับประกันคุณสมบัติ consistency นี้ สามารถทำได้โดยระบุกฎเกณฑ์ความคงสภาพ (Integrity constraint) ซึ่งจะมีการใช้ Domain constraint, RI ,FD,trigger

    Isolation : DBMS ต้องรับประกันในการจัดลำดับการเข้าประมวลผลของ transactions เหล่านั้น ให้มีลักษณะเสมือนเป็น serial execution การรับประกันคุณสมบัติ Isolation เป็นหน้าที่ความรับผิดชอบของ  Concurrency-control manager หรือ Scheduler

    Durability : หลังจากการประมวลผลเสร็จหากเกิด System failures  DBMS จะต้องรับประกันว่าการเปลี่ยนแปลงยังคงอยู่โดยจะต้องมี 1. ข้อมูลการอัพเดตจะต้องถูกเขียนในดิสก์ก่อนที่จะประมวลเสร็จ 2. ข้อมูลเกี่ยวข้องกับการอัพเดตจะต้องเพียงพอต่อการ restruct ซึ่งเป็นหน้าที่ของ recovery manager

  • โครงสร้างการทำงาน
  • transaction_3.jpg

    1. Transaction Manager เป็นตัวควบคุม transaction และตัดสินใจว่าจะให้คำสั่งไหนประมวลผล และมีการทำงานร่วมกับ application program และเชื่อมต่อกับ Scheduler

    2. Scheduler (lock manager,concurrency control manager) เป็นตัวจัดลำดับการประมวลผลของ transaction ให้เป็นแบบ serial execution

    3. Recovery manager เป็นตัวรับประกันว่าถ้าหากมีข้อผิดพลาดเกิดขึ้นระหว่าง transaction แล้วฐานข้อมูลจะต้องอยู่ในสถานะ consistent

    4. Buffer manager รับผิดชอบส่วนการส่งข้อมูลระหว่าง disk storage และ main memory

  • Schedule
  • – Schedule คือลำดับของคำสั่งที่มาจาก set of transaction หรือคำสั่งที่อยู่ภายใน transaction แต่ละตัว

    – Serial schedule เป็น Schedule ที่คำสั่งของแต่ละ transaction ถูกประมวลผล โดยไม่มีการinterleaved (การสอดแทรกของคำสั่งเป็นผลให้ฐานข้อมูลเข้าสู่สภาวะที่ไม่ถูกต้อง) จาก transactions อื่น

    – Non-serial schedule เป็น Schedule ที่คำสั่งของแต่ละ transaction ถูกประมวลผล ถูกมีการinterleaved (การสอดแทรกของคำสั่งเป็นผลให้ฐานข้อมูลเข้าสู่สภาวะที่ไม่ถูกต้อง) จาก transactions อื่น

    – Conflict serialization schedule คือ non-serial schedule แต่ให้ผลการ run เหมือน serial schedule

  • Concurrency Control
  • Concurrency Control (การควบคุมภาวะพร้อมกัน) เป็นกระบวณการที่ใช้ในการจัดการ transaction หลายๆ transaction ที่มีความต้องการใช้งานข้อมูลชุดเดียวกันในช่วงเวลาเดียวกันจากฐานข้อมูล เพื่อนำข้อมูลเหล่านั้นมาประมวลผลในแต่ละ transaction

  • ปัญหาที่เกิดจาก Concurrency Control
  • 1. Lost update problem (ปัญหาการสูญเสียจากการอัพเดตข้อมูล) : เป็นปัญหาที่เกิดจาก transaction ได้ถูกส่งเข้ามาในช่วงเวลาใกล้เคียงกัน และมีการประมวลผลแทรกระหว่างกันทำให้ผลลัพธ์จากการประมวลผลเกิดความผิดพลาด ไม่ถูกต้อง

    2. The uncommitted dependency problem (ปัญหาข้อมูลที่ยังไม่ได้รับการยอมรับความสมบูรณ์) : เป็นปัญหาที่เกิดขึ้นจากการมีการอนุญาตให้ transaction หนึ่งสามารถดูผลจากรายการอื่นได้ในขณะที่ข้อมูลนั้นยังประมวลผลจาก transaction อื่นอยู่ ซึ่งยังไม่มีการ uncommitted ทำให้เกิดข้อผิดพลาดขึ้น

    3. Incorrect summary  problem (ปัญหาการวิเคราะห์ผลลัพธ์ที่ขัดแย้งกัน) : เป็นปัญหาที่เกิดจาก transaction ที่ส่งเข้าประมวลผลในช่วงเวลาที่ใกล้เคียงกัน ส่งผลให้การคำนวนหาผลลัพธ์จากtransaction หนึ่ง ซ่งผลลัพธ์ใหม่ที่ได้ยังไม่ได้รับการอัพเดตก่อนที่จะให้ transaction อื่นๆ นำค่าไปใช้งาน ในขณะที่บาง transaction ที่เข้ามาทีหลังอาจจะมีการอ่านข้อมูลจาก transaction ที่อัพเดตแล้วทำให้ผลลัพธ์ที่ได้เกิดความขัดแยังกัน

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

    transaction_4.jpg

    พื้นฐานของการล็อคจะประกอบด้วย

    1. Read Lock : ทำการอ่านข้อมูลได้ แต่จะไม่สามารถทำการอัพเดตข้อมูลได้

    2. Write Lock : สามารถทำได้ทั้งการอ่านและการอัพเดต

    ตัวอย่างการใช้ล็อค

    transaction_5.jpg

    – โดยจะสังเกตได้ว่าช่วงเวลาที่ 3 จะมี T4 ขอใช้ค่า balance จากการผลิตของ T3 แต่ต้องรอจนกว่า T3 จะทำการ Unlock หรือ Rollback

  • ปัญหาจากการปล่อยล็อคเร็ว
  • 1. ถ้าปล่อยล็อคเร็วเกินไปอาจเกิดปัญหา Inconsistency กับฐานข้อมูล

    2. cascade rollback : อาจจะทำให้การ roll back ของ transaction เดียวอาจจะเกิดการ undo ต่อเนื่อง

  • แก้ปัญหาการปล่อยล็อคเร็ว
  • – สามารถแก้ปัญหาการปล่อยล็อคเร็วด้วย Two-phase locking (2PL) : transaction ก่อนเริ่มประมวลผลจะขอ lock ทั้งหมดเลย และจะปล่อยล็อคเมื่อเสร็จการทำงาน โดยทุก ๆ transaction สามารถแบ่งออกได้เป็น 2 phase คือ

    1. growing phase : phase  ที่ได้รับการ lock ทุกตัวที่ต้องการ

    2. shrinking phase : เป็นช่วงเวลาที่รายการหนึ่งจะต้องปลดปล่อยการปิดกั้น และจะมีการปิดกั้นไม่ได้

    – การทำ Two-phase locking (2PL) อาจทำให้เกิด dead lock ได้

    – Dead lock คือ transaction 2 ตัวหยุดรอซึ่งกันและกัน และเมื่อเกิด dead lock แล้ว transaction จะทำงานไม่ได้ โดย DBMS จะ recognize เจอ และทำการ break dead lock

  • เพิ่มเติม
  • http://pi.eng.src.ku.ac.th/file.php/1/moddata/forum/9/13676/transactionManage1.ppt

    http://www.watchai.com/cmm372/Transaction.ppt

  • ส่งท้าย : วันนี้ไปกินไอติมเอเต้มาอีกแล้ว อิอิ
  • etc_2.jpg

    Leave a comment