คือไม่อนุญาตให้ทรานแซกชั่นอื่นๆ

Report
บทที่ 9
การจัดการทรานแซกชั่น
และการควบคุมสภาวะการทางานพร้ อมกัน
(TRANSACTION MANAGEMENT AND
CONCURRENCY CONTROL)
จุดประสงค์
อธิบายโอเปอเรชัน่ และสถานะของทรานแซกชัน่ ได้ อย่างถูกต้ อง
 บอกปั ญหาที่เกิดขึ ้นจากสภาวะการทางานพร้ อมกันได้
 เข้ าใจเทคนิควิธีการควบคุมสภาวะการทางานพร้ อมกัน
 บอกประเภทของการล็อคและระดับการล็อคได้
 อธิบายหลักการกู้คืนฐานข้ อมูลด้ วยเทคนิควิธีตา
่ งๆ ได้ อย่างถูกต้ อง

ทรานแซกชัน่ คืออะไร?
ทรานแซกชัน่ คือ การประมวลผล เช่น การอ่าน
การบันทึก การปรับปรุง หรื อการลบข้ อมูล
ซึ่งหลังจากประมวลผลแล้ว ข้อมูลจะต้องมีความถูกต้องตรงกัน
คุณสมบัติของทรานแซกชัน่ ที่ดี
ความเป็ นหนึง่ เดียว(Atomicity)
 ความสอดคล้ อง(Consistency)
 ความเป็ นอิสระ(Isolation)
 ความคงทน(Durability)

ความเป็ นหนึง่ เดียว (Atomicity)
ทุกการกระทาของทรานแซกชัน่ จะต้ องทางานโดยสมบูรณ์ ตัง้ แต่
เริ่มต้ นจนกระทัง่ จบกระบวนการของทรานแซกชัน่ นันๆ
้
หรื อไม่เช่นนัน..
้
ก็จะต้ องยกเลิกการกระทาใดๆ ทังหมด
้
(Rollback) ที่ผ่านมา ซึง่
เปรี ยบเสมือนว่ายังไม่เคยเอ็กซีควิ ต์กระบวนการใดๆ เลย
ความสอดคล้ อง (Consistency)
“ทุกทรานแซกชั่นจะส่ งผลต่ อข้ อมูลในฐานข้ อมูล” โดยข้ อมูล
ในฐานข้ อมูลต้ องมีความถูกต้ องหรื อมีความสอดคล้ องตรงกันอยู่เสมอ
ความเป็ นอิสระ (Isolation)
เป็ นคุณสมบัติของทรานแซกชั่น ที่ใช้ ในการ ”ป้องกันผลกระทบ
จากการกระทาพร้ อมกันของทรานแซกชัน่ อื่นๆ”
คุณสมบัตินี ้ จะไม่อนุญาตให้ แต่ละทรานแซกชั่นเปลี่ ยนแปลง
ข้ อมูลได้ ในเวลาเดียวกัน โดยจะต้ องรอคอยให้ ทรานแซกชั่นที่อยู่ ลาดับ
ก่ อนหน้ าได้ จดั การข้ อมูลให้ เสร็จสมบูรณ์เสียก่อน
เพื่อมิให้ ส่งผลกระทบต่ อข้ อมูลที่ไม่ ถูกต้ องในภายหลัง
ความคงทน (Durability)
เมื่อทรานแซกชัน่ ทางานเสร็ จสมบูรณ์ (Commit) ระบบจะต้ อง
สามารถคงข้ อมูลที่ได้ รับการแก้ ไขหรื ออัปเดตตามรายการทรานแซกชั่น
นันๆ
้ ไว้ ได้
SAVE
แล้ วถ้ าเกิดสภาวะการทางานพร้ อมกันของทรานแซกชัน่ ขึ ้นล่ะ..
จะทายังไง?
จะต้ องมี กระบวนการจัดการกับการกระทาของทรานแซกชั่นที่
ก่อให้ เกิดสภาวะการทางานพร้ อมกัน
ไม่เช่นนัน..
้
จะส่ งผลเสียต่ อความผิดพลาดในข้ อมูล
กอล์ฟ
1. อ่านระเบียนบัญชีเงินฝาก ก.
(ยอดเงินคงเหลือ=1000 บาท)
เวลา
t1
t2
2. ทารายการถอนเงิน 200
(ยอดเงินคงเหลือ=800 บาท)
ยอดนี ้ยังไม่ถกู บันทึกลงฐานข้ อมูล
t3
t4
3. ปรับปรุงยอดบัญชีเงินฝาก ก.
(ยอดเงินคงเหลือ=800 บาท)
บันทึกลงฐานข้ อมูล
t5
t6
แก๊ ป
1. อ่านระเบียนบัญชีเงินฝาก ก.
(ยอดเงินคงเหลือ=1000 บาท)
2. ทารายการถอนเงิน 300
(ยอดเงินคงเหลือ=700 บาท)
ยอดนี ้ยังไม่ถกู บันทึกลงฐานข้ อมูล
3. ปรับปรุงยอดบัญชีเงินฝาก ก.
(ยอดเงินคงเหลือ=700 บาท)
บันทึกลงฐานข้ อมูล
ERROR !
ปั ญหาจากภาวะการเข้ าถึงพร้ อมกัน
จากเหตุการณ์ ดงั กล่าวทาให้ ยอดเงินที่บนั ทึกลงในบัญชีลู กค้ านัน้ เกิ ด
ความผิดพลาด ส่งผลให้ เกิดปั ญหา 3 ประการ คือ
1. ปั ญหาการสูญเสียจากการแก้ ไขข้ อมูล
(The Lost Update Problem)
2. ปั ญหาข้ อมูลที่ยังไม่ ได้ รับการยืนยันความสมบูรณ์
(The Uncommitted Dependency Problem)
3. ปั ญหาความขัดแย้ งระหว่ างข้ อมูล
(The Inconsistent Analysis Problem)
1. ปั ญหาการสูญเสียจากการอัพเดตข้ อมูล
Time
นาย ก.
t1
t2 Begin_transaction
t3
Read(balx)
t4
balx = balx - 10
t5
Write(balx)
t6
Commit
นาย ข.
Begin_transaction
Read(balx)
balx = balx + 100
Write(balx)
Commit
ปั ญหาการอัพเดตที่ผิดพลาด
Balx
100
100
100
200
90
90
2. ปั ญหาจากการย้ อนกลับ
หรื อปั ญหาข้ อมูลที่ยงั ไม่ได้ รับการยืนยันความสมบูรณ์
Time
นาย ก.
t1
t2
t3
t4 Begin_transaction
t5
Read(balx)
t6
balx = balx - 10
t7
Write(balx)
t8 Commit
นาย ข.
Begin_transaction
Read(balx)
balx = balx + 100
Write(balx)
:
Rollback
ปั ญหาจากการอ่านข้ อมูลที่ยงั ไม่ได้ รับการ Commit
Balx
100
100
100
200
200
100
190
190
3. ปั ญหาความไม่สอดคล้ องกันของข้ อมูล
หรื อปั ญหาความขัดแย้ งระหว่างข้ อมูล
Time
นาย ก.
t1
t2 Begin_transaction
t3
Read(balx)
t4
balx = balx - 10
t5
Write(balx)
t6
Read(balz)
t7
balz = balz + 10
t8
Write(balz)
t9 Commit
t10
t11
นาย ข.
Begin_transaction
sum = 0
Read(balx)
sum = sum + balx
read(baly)
sum = sum + baly
Read(balz)
sum = sum + balz
Commit
ปั ญหาจากข้ อมูลที่ขดั แย้ งกัน
Balx
100
100
100
100
90
90
90
90
90
90
90
Baly
50
50
50
50
50
50
50
50
50
50
50
Balz Sum
25
25
0
25
0
25 100
25 100
25 150
25 150
35 150
35 150
35 185
35 185
ทาแบบฝึ กหัดกันดีกว่ า..
เทคนิคการควบคุมภาวะพร้ อมกัน
(Concurrency Control Techniques)
เมื่อเกิดภาวะพร้ อมกัน ระบบจัดการฐานข้ อมูลหรื อ DBMS ต้ องมีเทคนิค
หรื อกระบวนการในการในการควบคุมภาวะพร้ อมกัน เพื่อมิให้ เกิดการแย่ งชิง
ข้ อ มู ล ที่ ยั ง ประมวลผลไม่ เ สร็ จ และถูก น าไปใช้ ง านโดยทรานแซกชั่น อื่ น ที่
สอดแทรกเข้ ามา
เทคนิคการควบคุมภาวะพร้ อมกัน แบ่งออกเป็ น 2 ประเภท คือ
1. ควบคุมภาวะพร้ อมกันด้ วยการล็อก (Locking)
2. ควบคุมภาวะพร้ อมกันโดยไม่ ใช้ วธิ ีการล็อก (Without Locking)
1. ควบคุมภาวะพร้ อมกันด้ วยการล็อก
(Lock-Based Concurrency Control)
เป็ นเทคนิ ค การก าหนดสถานะล็ อ กให้ กั บ ทรานแซกชั่ น เพื่ อ
ป้ องกัน ทรานแซกชั่น อื่ น ๆ เข้ า มาใช้ ง านข้ อ มูล นัน้ จนกว่ า ข้ อ มูล ที่ อ ยู่ใ น
สถานะล็อกนันจะท
้ างานเสร็จสมบูรณ์และปลดล็อก
และเมื่อปลดล็อกแล้ วทรานแซกชั่นอื่นๆ ก็สามารถนาข้ อมู ลไปใช้
งานต่อได้
Emery
1. Request account balance
2. Lock account balance
Marsha
1. Request account balance
3. Read account balance
(Balance = 1000)
4. Withdraw 200
(Balance = 800)
5. Write account balance
(Balance = 800)
6. Unlock account balance
2. Lock account balance
3. Read account balance
(Balance = 800)
4. Withdraw 300
(Balance = 500)
5. Write account balance
(Balance = 500)
6. Unlock account balance
พื ้นฐานการล็อก
ประกอบด้ วย
 Read Lock คือถ้ าทรานแซกชัน
่ ใดมีการ Read Lock ข้ อมูลเอาไว้ ทราน
แซกชัน่ นันจะอ่
้ านข้ อมูลได้ อย่างเดียว จะอัพเดตไม่ได้

Write Lock คือถ้ าทรานแซกชัน่ ใดมีการ Write Lock ข้ อมูลเอาไว้ ทราน
แซกชัน่ นันก็
้ จะทังอ่
้ านและอัพเดตข้ อมูลได้
(สถานะนี ้จะไม่อนุญาตให้ ผ้ อู ื่นเข้ ามาใช้ งานจนกว่าทรานแซกชัน่ นี ้จะทางาน
เสร็จ)
ประเภทของการล็อก
แบ่งออกเป็ น 2 ชนิด
1. การล็อกแบบแชร์ (Shared Locks) คืออนุญาตให้ ทรานแซกชัน่ อื่นๆเข้ ามา
อ่านข้ อมูลได้ อย่างเดียว จะอัพเดตไม่ได้ นัน่ ก็คือการ Read Lock หรื อ S-Lock
2. การล็อกแบบเอ็กซ์ คลูซีฟ (Exclusive Locks) คือไม่อนุญาตให้ ทรานแซกชัน่
อื่นๆ ใช้ ข้อมูลที่ถกู ล็อกอยู่ นัน่ ก็คือการ Write Lock หรื อ X-Lock
ระดับของการล็อก (Locking Level)
1. การล็อกฐานข้ อมูล (Database Locking)
2. การล็อกตาราง (Table Locking)
3. การล็อกเรคอร์ ด (Record Locking)
4. การล็อกฟิ ลด์ (Field Locking)
1. การล็อกฐานข้ อมูล (Database Locking)

ล็อกเพื่อไม่ให้คนอื่นเข้ามาใช้ฐานข้อมูลได้ จนกว่าจะปลดล็อก
อธิเช่น .. การสารองข้อมูล ..
โดย ในระหว่างที่เราทาการสารองข้อมูลอยู่น้ั น ฐานข้อมูลจะถูกล็อก
เอาไว้เพื่อไม่ให้คนอื่นเข้ามาใช้งาน จนกว่าจะสารองข้อมูลเสร็จสมบูรณ์ และจึง
ปลดล็อก
2. การล็อกตาราง (Table Locking)
เพื่อไม่ให้ ใครเข้ ามายุง่ เกี่ยว ในขณะที่มีการปรับปรุ งตารางอยู่
 ผู้ใช้ งานคนอื่นๆ จะไม่สามารถอ่านเรคอร์ ดจากตารางนันได้
้ จน
กว่า..จะมีการปลดล็อกตาราง
 เหมาะสมกับงานที่ต้องมีการปรับปรุ งข้ อมูลทังหมดในตาราง
้

3. การล็อกเรคอร์ ด (Record Locking)
เป็ นการล็อกเพียงบางเรคอร์ ดหรื อบางแถวในตาราง
 เหมาะกับงานที่ต้องการปรับปรุ งข้ อมูลเฉพาะบางเรคอร์ ดที่ต้องการ
เช่น การปรับปรุงที่อยูข่ องพนักงานบางคน ฯลฯ
 ผู้ใช้ คนอื่นๆ จะไม่สามารถเข้ ามาใช้ เรคอร์ ดของพนักงานคนนี ้ได้
จนกว่าจะถูกปลดล็อก

4. การล็อกฟิ ลด์ (Field Locking)



เป็ นการล็อกแอตตริ บิวต์หรื อคอลัมน์ที่ถกู ใช้ งาน
ยังสามารถใช้ งานข้ อมูลต่างๆ ในเรคอร์ ดได้ เหมือนเดิม ..
ยกเว้ นแอตตริ บิวต์ที่ถกู ล็อก
การล็อกวิธีนี ้..จะนามาใช้ กบั แอตตริ บิวต์ที่มกั จะเปลี่ยนแปลงค่าอยูเ่ สมอ..
แต่เป็ นวิธีที่ไม่คอ่ ยนิยมทากัน..
การล็อกค้ าง(Deadlock) หรื อ ภาวะติดตาย
ภาวะติดตาย จะเกิดขึ ้นก็ตอ่ เมื่อ มีทรานแซกชัน่ ตัง้ แต่ 2 ทราน
แซกชัน่ ขึ ้นไปได้ มีการล็อกข้ อมูล และ แต่ละทรานแซกชั่นก็ต่าง
รอให้ แต่ละฝ่ ายทาการปลดล็อก เช่น
Emery
Marsha
1. Lock record X
1. Lock record Y
2. Request record Y
2. Request record X
Wait for Y
Wait for X
Deadlock
2. ควบคุมภาวะพร้ อมกันโดยไม่ใช้ วิธีการล็อก
(Concurrency Control Without Locking)
เมื่อเกิดการ Deadlock ดังนันวิ
้ ธีการแก้ ปัญหาก็คือ ไม่ใช้ วิธีการ
ล็อก (Without Lock) ซึง่ วิธีนี ้ก็แบ่งออกเป็ น 2 แบบ
- Optimistic Concurrency Control
- Timestamp-Based Concurrency Control
Optimistic Concurrency Control
วิธีนี ้ประกอบด้ วย 3 ขันตอน
้
คือ
1. Read
2. Validation
3. Write
Read
อ่านข้ อมูลจากฐานข้ อมูล และบันทึกลงใน
Private workspace ของตนเอง
โดยที่ทรานแซกชัน่ อื่นๆ จะไม่สามารถเข้ ามา
ข้ องเกี่ยวกับพื ้นที่ของตนได้
เป็ นขันตอนการตรวจสอบโดย
้
DBMS
- เป็ นการตรวจสอบความขัดแย้ งระหว่างทรานแซกชัน่
- ถ้ าเกิดความขัดแย้ งกัน ทรานแซกชัน่ เหล่านันจะถู
้ กยกเลิก
และพื ้นที่ Private Workspace จะถูกเคลียร์ เพื่อเริ่ มต้ นการ
ทางานซ ้าอีกรอบของทรานแซกชัน่ นันๆ
้
Write
Validation
หากไม่พบปั ญหาความขัดแย้ งกันระหว่างทรานแซกชัน่
ก็จะทาการนาข้ อมูลที่อยู่ใน Private Workspace มา
บันทึกลงในฐานข้ อมูลจริ ง
Timestamp-based Concurrency Control
วิธีนี ้จะใช้ เวลาในการตัดสินการเข้ าใช้ ข้อมูลของทรานแซกชัน่
โดยจะเก็บค่าของเวลาลงตัวแปร แล้ วดูว่าทรานแซกชัน่ ไหนมาก่ อนก็
ให้ เข้ าใช้ ก่อน
สามารถทาได้ 2 วิธีด้วยกัน คือ..
- ใช้ เวลาของระบบเป็ นตัวประทับ (Systems Clock)
- ใช้ ตวั แปรนับ (Counter)
Timestamp-based Concurrency Control
ใช้ เวลาของระบบเป็ นตัวประทับ (Systems Clock)
วิธีนีจ้ ะนาเวลาของระบบเป็ นตัวแปรเก็บค่า แล้ วนาไปประทับ
เพื่อใช้ กาหนดลาดับของแต่ละทรานแซกชัน่
 ใช้ ตัวแปรนับ (Counter)
วิธีนี ้จะใช้ ตวั แปรนับ หรื อที่เรี ยกว่า Counter ที่ใช้ เป็ นตัวนับ
ด้ วยการเพิ่มค่าทีละหนึ่ง แล้ วนามาเป็ นตัวกาหนดลาดับให้ กบั
แต่ละทรานแซกชัน่

END PRESENT

similar documents