Transaction คือ 1 หน่วยงานในทางตรรกะที่ต้องทำให้สำเร็จหรือถูกยกเลิก Transaction ที่สมบูรณ์จะเปลี่ยนฐานข้อมูลจากสถานะหนึ่งไปยังอีกสถานะหนึ่ง คุณสมบัติของ Transaction
- Atomicty – ทุกกระบวนการของ Transection จะต้องเสร็จสมบูรณ์ ถ้ามีปัญหาเกิดขึ้นจะต้องยกเลิกทั้งหมด
- Consistency– สถานะของ Database ก่อนและหลังเกิด Transection ที่สมบูรณ์ จะต้องอยู่ในสถานะ Consistent state เสมอ
- ประเภทของความถูกต้องของข้อมูล เราแบ่งข้อกำหนดเรื่องความถูกต้องของข้อมูลโดยทั่วไป (ข้อกำหนดสภาวะคงที่) ออกเป็น 4 ประเภท คือ
- ข้อกำหนดเรื่องชนิดของข้อมูล (Type Constraint)
- ข้อกำหนดแอตทริบิวต์ (Attibute Constraint)
- ข้อกำหนดเรื่องโครงสร้างตาราง (Relvar Constraint)
- ข้อกำหนดเรื่องฐานข้อมูล (Database Constraint)
- Isolation – เมื่อ Transaction หนึ่งมีการใช้ข้อมูลจากตารางต่างๆ เพื่อทำการประมวลผล Transection อื่นจะไม่สามารถใช้ข้อมูลที่ใช้อยู่ได้ ต้องรอจนกว่า Transection แรกทำงานจนเสร็จ
- Durability – Transection ที่ทำงานสำเร็จและได้รับการยืนยันจากระบบแล้ว จะไม่สามารถยกเลิกได้อีก
- Serializability – เมื่อมีหลาย Transaction ทำงานพร้อมกันโดยอาจใช้ข้อมูลเดียวกันหรือต่างกัน ผลลัพธ์จากการประมวลผลดังกล่าว เสมือนได้ผลลัพธ์จากการทำงานเป็นลำดับ
การจัดการ Transection ด้วยภาษา SQL มี 2 คำสั่ง
- COMMIT คำสั่งยืนยันการทำงานสำเร็จ
- ROLLBACKคำสั่งยกเลิกการทำงานของ Transaction
- ถ้ามี COMMIT แล้วระบบเกิดความเสียหายจะรับรองว่าข้อมูล COMMIT แล้วจะไม่สูญหาย
- ถ้ายังไม่ได้ COMMIT คำสั่ง ROLLBACK จะช่วยรับรองว่าข้อมูลเดิมก่อนทำ Transaction จะไม่สูญหาย
Transaction Log แต่ละ Transaction ประกอบด้วย
- ชนิดของ Operation (Update, Delete, Insert)
- ชื่อของการกระทำที่มีผลต่อ Transaction
- ค่าก่อนและหลัง update
- ค่า Pointer ที่ชี้ไปยัง Transactiong Log ก่อนและหลังใน Transaction เดียวกัน
- COMMIT จบ Transaction
Concurrency Control (การควบคุมการทำงานของผู้ใช้งานหลายคนในเวลาเดียวกัน)
ปัญหาที่เกิดขึ้น
- Lost Updates การสูญเสียการปกป้องข้อมูล – เกิดจากการอ่านข้อมูลตัวเดียวกันไปใช้งาน แล้วส่ง Update ข้อมูลตัวเดียวกัน 1 ในการ Update จะสูญเสียไป
- Uncommitted data การยกเลิกการปกป้องข้อมูล – Transaction หนึ่งสั่ง ROLLBACK แล้วจากที่ Transaction ที่สอง เข้ามาใช้ข้อมูลที่ยังไม่ได้ COMMIT
- Insonsistent Retievals การขัดแย้งของการทำงาน – Trasaction แรกเข้ามาใช้ข้อมูล แต่ Transaction สองเข้ามาเปลี่ยนข้อมูลไปก่อน Transavtion แรกจึงได้ข้อมูลที่เปลี่ยนแปลงแล้วไปใช้งาน ทั้งที่ต้องการจะให้ข้อมูลก่อนการปกป้อง
1. Concurrency Control ด้วยวิธี Locking
- เพื่อเป็นการการันตีข้อมูลให้กับ Transaction ที่ทำงานอยู่
- เพื่อป้องกัน Transaction อื่นเข้ามาอ่านข้อมูลที่ยังไม่สอดคล้องถูกต้อง
Lock Granularity (การจองข้อมูล)
- ระดับที่สามารถ Lock ได้
- Database
- Table
- Page
- Row
- Field (Attribute)
- ประเภทของการ Lock
- Binary Lock : มี 2 สถานะ Locked= 1, Locked = 0
- Exclusive Lock : Transaction ที่จองจะใช้งานอ่านและเขียนได้ Transaction เดียว Transaction อื่นจะใช้ต้องรอ
- Shared Lock : Transaction ที่จองจะให้งานอ่านและเขียนได้ Transaction อื่นเข้ามาอ่านได้แต่เข้าไม่ได้
2. Two-Phase Locking เพื่อให้แน่ใจว่าเป็นไปตามลำดับแต่ไม่ป้องกัน dead lock มี 2 เฟส
- Growing phase – ทุก Transaction จะทำการ lock ได้แต่ปลด lock ไม่ได้
- Shrinking phase – ทุก Transaction จะปลด lock ได้แต่จะ lock ใหม่ไม่ได้
ข้อดี (จะช่วยให้)
- 2 Transaction ไม่ทำการ lock ที่ขัดแย้งกัน
- จะไม่มีการปลด lock และ lock ใน Transaction เดียวกัน
- ข้อมูลจะไม่ถูกเปลี่ยนแปลงขนาดที่ยัง lock อยู่
Dead Locks
- เป็นสภาวะที่เกิดขึ้นเมื่อ 2 Transaction ต่างรอให้อีก Transaction ปลด lock ข้อมูล
- จะเกิดขึ้นเมื่อ Transaction หนึ่งต้องการใช้ Exclisive lock
- จะไม่เกิดขึ้นในกรณีใน Shared lock
วิธีการควบคุม Dead locks
- Prevention ป้องกัน
- Detaction ตรวจสอบ
- Avoidance หลีกเลี่ยง
การเลือกวิธีความคุม Dead Locks ขึ้นอยู่กับสภาวะแวดล้อมของ Database
- ถ้าความน่าจะเป็นต่ำใช้ Detaction
- ความน่าจะเป็นสูงใช้ Prevention
3. Time Stamping Methods
- มีการกำหนดเวลาให้แต่ละ Transaction
- มีการลำดับที่แน่นอนของ Transaction
- Uniqueness มั่นใจว่าไม่มีค่าเวลาที่เท่ากัน
- Monotonicityมั่นใจว่าค่าเวลาเพิ่มขึ้นเสมอมี 2 วิธี
- Wait / Dia
- Wound / Wait
- ไม่ต้อง conflict
- ไม่ต้องใช้การ Lock หรือ time stamp
- transaction ไม่ต้องตรวจสอบหน้าจนกว่าจะ commit
- phase : read, validation (ตรวจสอบ), write
Transaction Recovery
- Write-ahead-log-protocol – มั่นใจว่า transaction log ได้ถูกบันทึกก่อนที่จะ update ข้อมูล
- Redunant transaction log – มั่นใจว่าถ้า hdd เสีย จะต้องกู้กลับมาได้
- Buffers – มีหน่วยความจำชั่วคราวในความจำหลัก
- Checkpoints – ช่วงเวลาที่เอาข้อมูลจาก buffer มาบันทึกลง hdd
- Deferred-Write Technique
- แค่ transaction log ที่ update
- ขั้นตอนการ recovery : หาจุด checkpoint สุดท้าย
- ถ้า trans commit ก่อน chkpt -> ไม้ต้องทำอะไร
- ถ้า trans commit แล้ว chkpt -> ใช้ trans log ในการทำ trand ใหม่
- ถ้า tran มีการ rollback -> ไม้ต้องทำอะไร
- Write-through technique
- Database อยู่ระหว่าง update โดย trans กำลัง execute
- ขั้นตอนการ recovery : หาจุด chkpt สุดท้าย
- ถ้า trans commit ก่อง chkpt -> ไม่ต้องทำอะไร
- ถ้า trans commit แล้ว chkpt -> DBMS ส่ง redo trans โดยใช้ค่า after
- ถ้า trans มีการ rollback -> ไม่ต้องทำอะไรเพราะไม่มีการ update เจ็ดขั้น