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

Download Report

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

่
บทที 9
่
การจัดการทรานแซกชน
ั
และการควบคุมสภาวะการทางาน
พร ้อมกัน
(TRANSACTION
MANAGEMENT AND
CONCURRENCY CONTROL)
จุดประสงค์
่ั
่ั ้
อธิบายโอเปอเรชนและสถานะของทรานแซกช
นได
อย่างถูกต ้อง
่ ดขึนจากสภาวะการท
้
 บอกปัญหาทีเกิ
างานพร ้อมกัน
ได ้
 เข ้าใจเทคนิ ควิธก
ี ารควบคุมสภาวะการทางานพร ้อม
กัน
 บอกประเภทของการล็อคและระดับการล็อคได ้
 อธิบายหลักการกู ้คืนฐานข ้อมูลด ้วยเทคนิ ควิธต
ี า่ งๆ
ได ้อย่างถูกต ้อง

ั่ คืออะไร?
ทรานแซกชน
่ ั คือ การประมวลผล
ทรานแซกชน
เช่น การอ่าน การบันทึก การปร ับปรุง
หรือการลบข ้อมูล
ซงึ่ หลังจากประมวลผลแล ้ว ข ้อมูลจะต ้องมี
ความถูกต ้องตรงกัน
ั่ ทีด
คุณสมบัตข
ิ องทรานแซกชน
่ ี




ความเป็ นหนึ่ งเดียว(Atomicity)
ความสอดคล ้อง(Consistency)
ความเป็ นอิสระ(Isolation)
ความคงทน(Durability)
ความเป็ นหนึ่ งเดียว (Atomicity)
่ั
ทุก การกระท าของทรานแซกช นจะต
อ้ งท างาน
้
่ น
โดยสมบู ร ณ์ ตังแต่
เ ริมต
้ จนกระทั่งจบกระบวนการ
่ ั ้นๆ
ของทรานแซกชนนั
หรือไม่เช่นนั้น..
ก็ จ ะ ต ้อ ง ย ก เ ลิ ก ก า ร ก ร ะ ท า ใ ด ๆ ทั้ ง ห ม ด
่ านมา ซึงเปรี
่
(Rollback) ทีผ่
ยบเสมือนว่ายังไม่เคยเอ็ก
ซีควิ ต ์กระบวนการใดๆ เลย
ความสอดคล ้อง (Consistency)
่ั
“ทุ ก ทรานแซกช นจะส่
ง ผลต่ อ ข้อ มู ลใน
ฐานข้อ มู ล” โดยข อ้ มู ลในฐานข อ้ มู ล ต อ้ งมี ค วาม
ถูกต ้องหรือมีความสอดคล ้องตรงกันอยู่เสมอ
ความเป็ นอิสระ (Isolation)
่ ั ทีใช
่ ้ในการ ”
เป็ นคุณสมบัตข
ิ องทรานแซกชน
ป้ องกันผลกระทบจากการกระทาพร ้อมกันของทราน
่ ั นๆ”
่
แซกชนอื
่ั
คุณสมบัตน
ิ ี ้ จะไม่อนุ ญาตให ้แต่ละทรานแซกชน
่
เปลียนแปลงข
อ้ มู ลได ใ้ นเวลาเดีย วกัน โดยจะต อ้ งรอ
่ ั อยู
่ ่ ล าดับก่อ นหน้ า ไดจ้ ด
คอยให ท
้ รานแซกช นที
ั การ
ข ้อมูลให ้เสร็จสมบูรณ์เสียก่อน
่ ให้ส่งผลกระทบต่อข้อมู ลทีไม่
่ ถูกต้อง
เพือมิ
ในภายหลัง
ความคงทน (Durability)
เ มื่ อ ท ร า น แ ซ ก ช ่ ั น ท า ง า น เ ส ร็ จ ส ม บู ร ณ์
่ ้รบั การ
(Commit) ระบบจะต ้องสามารถคงข ้อมูลทีได
่ ั ้นๆ ไว ้ได ้
แก ้ไขหรืออัปเดตตามรายการทรานแซกชนนั
SAVE
แล ้วถ ้าเกิดสภาวะการทางานพร ้อมกันของทราน
่ ั นล่
้ ะ..
แซกชนขึ
จะทายังไง?
จะต ้องมีกระบวนการจัดการกับการกระทาของท
่ ั ก่
่ อให ้เกิดสภาวะการทางานพร ้อมกัน
รานแซกชนที
ไม่เช่นนั้น..
จะส่งผลเสียต่อความผิดพลาดในข้อมู ล
กอล ์ฟ
1. อ่านระเบียนบัญชีเงินฝาก
ก.
(ยอดเงินคงเหลือ=1000
บาท)
2. ทารายการถอนเงิน 200
(ยอดเงินคงเหลือ=800 บาท)
้ งไม่ถก
ยอดนี ยั
ู บันทึกลง
ฐานข ้อมูล
เวลา
t1
t2
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. ปั ญหาความขัดแย้งระหว่างข้อมู ล
1. ปัญหาการสูญเสียจากการอัพเดต
ข ้อมูล
Tim
นาย ก.
นาย ข.
e
t1
Begin_transactio
t2 Begin_transacti
n
t3
on
Read(balx)
t4
Read(balx)
balx = balx +
t5
balx = balx 100
t6
10
Write(bal
)
x
่ ดพลาด
ปัญหาการอัพเดตทีผิ
Write(balx)
Commit
Commit
Balx
100
100
100
200
90
90
2. ปัญหาจากการย ้อนกลับ
่ งไม่ได ้ร ับการยืนยัน
หรือปัญหาข ้อมูลทียั
ความสมบูรณ์
Tim
นาย ก.
นาย ข.
Balx
e
t1
Begin_transaction 100
t2
Read(balx)
100
t3
balx = balx +
100
t4 Begin_transactio
100
200
t5
n
Write(balx)
200
t6
Read(balx)
:
100
t7
balx = balx Rollback
190
t8
10
190
่
ปัญหาจากการอ่านข ้อมูลทียังไม่ได ้ร ับการ Commit
Write(balx)
3. ปัญหาความไม่สอดคล ้องกันของข ้อมูล
หรือปัญหาความขัดแย ้งระหว่างข ้อมูล
Tim
e
นาย ก.
นาย ข.
Balx Baly Balz
t1
Begin_transactio 100
t2 Begin_transacti
n
100
t3
on
sum = 0
100
t4
Read(balx)
Read(balx)
100
t5
balx = balx sum = sum +
90
t6
10
balx
90
t7
Write(balx)
read(baly)
90
t8
Read(balz)
sum = sum +
90
t9
balz = balz +
baly
90
t10
10
90
t11
Write(balz)
่ ดแย90
ปัญหาจากข ้อมูลทีขั
้งกัน
Commit
Read(bal )
50
50
50
50
50
50
50
50
50
50
50
25
25
25
25
25
25
25
35
35
35
35
Su
m
0
0
100
100
150
150
150
150
185
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
3. Read account balance
(Balance = 1000)
Marsha
1. Request account
balance
4. Withdraw 200
(Balance = 800)
5. Write account balance
(Balance = 800)
6. Unlock account
balance
2. Lock account
balance
3. Read account
balance
4.
Withdraw
300
(Balance
= 800)
(Balance = 500)
5. Write account
balance
6.
Unlock=account
(Balance
500)
้
พืนฐานการล็
อก
ประกอบด ้วย
่ั
 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
อ่านข ้อมูลจากฐานข ้อมูล และ
บันทึกลงใน Private workspace
Rea
ของตนเอง
่
่ นๆ
่ จะไม่
d
โดยทีทรานแซกชั
นอื
่
้ ่
สามารถเข ้ามาข ้องเกียวกั
บพืนที
้
เป็ นขันตอนการตรวจสอบโดย
DBMS ของตนได ้
- เป็ นการตรวจสอบความขัดแย ้งระหว่างทราน
่
แซกชัน
Validati
่
- ถ ้าเกิดความขัดแย ้งกัน ทรานแซกชัน
on
้
้
่
เหล่านันจะถูกยกเลิกและพืนที Private
่ มต
่ ้นการ
Workspace จะถูกเคลียร ์ เพือเริ
้ กรอบของทรานแซกชันนั
่ ้นๆ
ทางานซาอี
หากไม่พบปัญหาความขัดแย ้งกัน
่ ก็จะทาการนา
ระหว่างทรานแซกชัน
Writ
่ ่ใน Private Workspace มา
ข
้อมู
ล
ที
อยู
e
บันทึกลงในฐานข ้อมูลจริง
Timestamp-based Concurrency
Control
้
วิธน
ี ี จะใช
้เวลาในการตัดสินการเขา้ ใช ้ขอ้ มูล
่ ั โดยจะเก็บค่าของเวลาลงตัวแปร
ของทรานแซกชน
่ั
แล ้วดูวา่ ทรานแซกชนไหนมาก่
อนก็ให ้เข ้าใช ้ก่อน
สามารถทาได ้ 2 วิธด
ี ้วยกัน คือ..
- ใช ้เวลาของระบบเป็ นตัวประทับ (Systems
Clock)
- ใช ้ตัวแปรนับ (Counter)
Timestamp-based Concurrency
Control
ใช้เวลาของระบบเป็ นตัวประทับ
(Systems Clock)
วิธ ีนี ้จะน าเวลาของระบบเป็ นตัว แปรเก็ บ ค่ า
แลว้ นาไปประทับเพื่อใช ้กาหนดลาดับ ของแต่
่ั
ละทรานแซกชน
 ใช้ตว
ั แปรนับ (Counter)
้
่ ยกว่า Counter
วิธน
ี ี จะใช
้ตัวแปรนั บ หรือทีเรี
ที่ใช ้เป็ นตัว นั บ ด ว้ ยการเพิ่มค่ า ทีล ะหนึ่ ง แล ว้
น ามาเป็ นตัว ก าหนดล าดับให ก
้ บ
ั แต่ ล ะทราน

END PRESENT