8/25/2017
Nội dung
1. Các vấn đề trong truy xuất đồng thời 2. Cách giải quyết vấn đề 3. Chế độ khóa
Chương 5. Xử lý truy xuất đồng thời
GV: Lê Thị Minh Nguyện Email: nguyenltm@huflit.edu.vn
Hệ quản trị Cơ sở dữ liệu 2
1.1. Mất dữ liệu đã cập nhật (lost updated)
1. Các vấn đề trong truy xuất đồng thời
1.1. Mất dữ liệu đã cập nhật (lost updated)
Xét 2 giao tác T1
T2
1.2. Không thể đọc lại (unrepeatable read)
Read(A) A:=A+10 Write(A)
1.3. “Bóng ma” (phantom)
Read(A) A:=A+20 Write(A) Giả sử T1 và T2 được thực hiện đồng thời
T2
T1 Read(A)
Read(A)
1.4. Đọc dữ liệu chưa chính xác (dirty read)
A:=A+10 Write(A)
A:=A+20 Write(A)
A=50 t1 t2 t3 t4 t5 t6
Dữ liệu đã cập nhật tại t4 của T1 bị mất vì đã bị ghi chồng lên ở thời điểm t6
A=60
A=70
1
Hệ quản trị Cơ sở dữ liệu 3 Hệ quản trị Cơ sở dữ liệu 4
8/25/2017
1.1. Mất dữ liệu đã cập nhật (lost updated) (tt)
1.1. Mất dữ liệu đã cập nhật (lost updated) (tt)
• Ví dụ: nhà sách còn 500 cuốn sách:
Từ lúc T1 nhân viên A yêu cầu mua 400 cuốn sách từ khách hàng X.
Cũng từ T1 nhân viên B yêu cầu mua 300 cuốn từ khách hàng Y.
Tình trạng xảy ra khi hai hay nhiều thao tác của các giao tác khác nhau cùng yêu cầu truy cập một mục dữ liệu. Các dữ liệu đã được các thao tác trước cập nhật nhưng lại bị các thao tác sau cập nhật lại làm thay đổi kết quả mong muốn.
A và B đọc dữ liệu thấy 500 cuốn nên đều đồng ý bán.
Vào lúc T2 nhân viên A sẽ thực hiện cập nhật số sách từ 500 thành 100.
Vào lúc T3 nhân viên B sẽ cập nhật số sách từ 500 thành 200
• Như vậy thao tác cập nhật của A không có tác dụng hay dữ liệu của A cập
nhật sẽ bị mất vì B cập nhật sau.
Hệ quản trị Cơ sở dữ liệu 5 Hệ quản trị Cơ sở dữ liệu 6
1.2. Không thể đọc lại (unrepeatable read)
1.2. Không thể đọc lại (unrepeatable read) (tt)
• Xét 2 giao tác
• Ví dụ: giả sử nhà sách còn 200 cuốn sách.
T2
T1
Vào lúc T1 nhân viên A bán cho khách 150 cuốn, sẽ thực hiện cập nhật sách từ 200 thành 50. (giao dịch chưa hoàn thành chẳng hạn vì việc giao nhận tiền chưa xong).
Read(A) A:=A+10 Write(A)
Read(A) Print(A) Read(A) Print(A)
Sau đó lúc T2, B nhận được yêu cầu mua 100 cuốn sách, nếu B đọc được dữ liệu
chưa hoàn tất thì B sẽ từ chối bán 100 cuốn sách này.
• Giả sử T1 và T2 được thực hiện đồng thời
A=50
T2
T1 Read(A)
t1
Read(A)
A=50
Nếu vào lúc T3 vì lý do nào đó chẳng hạn không đủ tiền khách hàng của A không mua 150 cuốn sách nữa. Giao tác bán hàng của A sẽ không thực hiện nên quay về trạng thái số sách còn lại là 200
A:=A+10
• T2 tiến hành đọc A hai lần thì cho hai kết quả khác nhau
Print(A)
A=50
Nhưng B từ chối khách hàng. Nếu B không đọc được dữ liệu từ lúc T1 đến T3 thì sẽ như thế nào?
Write(A)
Read(A)
A=60
Print(A)
A=60
t2 t3 t4 t5 t6 t7
2
Hệ quản trị Cơ sở dữ liệu 7 Hệ quản trị Cơ sở dữ liệu 8
8/25/2017
1.3. “Bóng ma” (phantom)
Đọc dữ liệu chưa chính xác (dirty read)
• Xét 2 giao tác T1 và T2 được xử lý đồng thời
• Xét 2 giao tác T1 và T2 được xử lý đồng thời
T2
• A và B là 2 tài khoản • T1 rút 1 số tiền ở tài khoản A rồi đưa vào tài khoản B • T2 kiểm tra đã nhận đủ tiền hay chưa?
T1 Read(A)
t1
A=70, B=50
T2
A:=A+10
• T2 đã đọc dữ liệu được ghi bởi T1 nhưng sau đó T1 yêu cầu hủy việc ghi
T1 Read(A)
A=70
t1
Write(A)
A:=A-50
Read(A)
Write(A)
A=20
Print(A)
A=20
Read(A)
Abort
t2 t3 t4 t5 t6
B=50
Read(B)
Print(A+B)
A+B=70
mất 50 ???
Read(B)
B:=B+50
Write(B)
t2 t3 t4 t5 t6 t7 t8 t9
Hệ quản trị Cơ sở dữ liệu 9 Hệ quản trị Cơ sở dữ liệu 10
2. Cách giải quyết vấn đề
3. Chế độ khóa
3.1. Các cấp độ khóa
3.2. Các mức cô lập cho giao tác
3.3. Live lock
• Các hệ quản trị CSDL thương mại đã làm hết rồi!!!!!! • Thực hiện cơ chế Transaction và cơ chế khoa • Trước khi transaction đọc hoặc chỉnh sửa dữ liệu, nó cần được bảo vệ và tránh ảnh hưởng của các transaction khác đang chỉnh sửa cùng dữ liệu.
3.4. Dead lock
3
Hệ quản trị Cơ sở dữ liệu 11 Hệ quản trị Cơ sở dữ liệu 12
8/25/2017
3.1. Các cấp độ khóa
3.1. Các cấp độ khóa (tt)
• Các kiểu lock
• Binary Locks
• Các mức Locking • Database level • Table level
• Có 2 trạng thái: locked (1) or unlocked (0).
• Page level
• Nếu 1 object bị lock bởi 1 transaction, không transaction nào
• Row level
được sử dụng object đó
• Field (attribute) level
• Nếu 1 object là unlocked, bất kỳ transaction nào cũng có thể
lock object đó để sử dụng
• 1 transaction phải “unlock”object sau khi hoàn tất.
Bất kể mức khóa nào DBMS có thể dùng 2 loại khóa khác nhau: Binary và Shared / Exclusive
14 Hệ quản trị Cơ sở dữ liệu 13 Hệ quản trị Cơ sở dữ liệu 14
Ví dụ
3.1. Các cấp độ khóa (tt)
T2
S
• Các kiểu lock
• Shared Locks
T1 Lock(A) Read(A,t) t:=t+100 Write(A,t) Unlock(A)
• Một shared lock tồn tại khi các transaction đồng thời đọc dữ
liệu
• Một shared lock không làm đụng độ dữ liệu khi các transaction
đồng thời chỉ đọc dữ liệu
• Một shared lock được gán khi transaction muốn đọc dữ liệu và
Lock(A) Read(A,s) s:=s*2 Write(A,s) Unlock(A) Lock(B) Read(B,s) s:=s*2 Write(B,s) Unlock(B)
dữ liệu đó không tồn tại exclusive lock.
Lock(B) Read(B,t) t:=t+100 Write(B,t) Unlock(B)
4
Hệ quản trị Cơ sở dữ liệu 15 Hệ quản trị Cơ sở dữ liệu 16
8/25/2017
3.1. Các cấp độ khóa (tt)
3.1. Các cấp độ khóa (tt)
• Các kiểu lock
• Các kiểu lock
• Exclusive Locks
• Exclusive Locks
• Tồn tại khi transaction ghi dữ liệu
• Tồn tại khi transaction ghi dữ liệu
• Được sử dụng khi có khả năng đụng độ dữ liệu
• Được sử dụng khi có khả năng đụng độ dữ liệu.
• Một exclusive lock sẽ được gán khi transaction muốn ghi dữ
• Một exclusive lock sẽ được gán khi transaction muốn ghi dữ
liệu và dữ liệu đó chưa bị lock
liệu và dữ liệu đó chưa bị lock
• Được dùng cho thao tác sửa đổi dữ liệu như lệnh INSERT, UPDATE hay DELETE. Bảo đảm là nhiều lệnh cập nhật không thực hiện trên cùng 1 tài nguyên cùng 1 lúc
• Được dùng cho thao tác sửa đổi dữ liệu như lệnh INSERT, UPDATE hay DELETE. Bảo đảm là nhiều lệnh cập nhật không thực hiện trên cùng 1 tài nguyên cùng 1 lúc
Hệ quản trị Cơ sở dữ liệu 17 Hệ quản trị Cơ sở dữ liệu 18
3.1. Các cấp độ khóa (tt)
3.2. Các mức cô lập cho giao tác
• Read Uncommitted
• Các kiểu lock
• Exclusive Locks
• Read Committed
• Repeatable Read
• Ví dụ: nếu lệnh Update sửa đổi các hàng trong một bảng mà lệnh này có kết nối (join) với 1 bảng khác thì sẽ cần bao nhiêu khóa?
• Một khóa shared cho các hàng đọc được trong bảng kết nối
• Serializable
• Một khóa exclusive cho các hàng được cập nhật trong bảng
update.
5
Hệ quản trị Cơ sở dữ liệu 19 Hệ quản trị Cơ sở dữ liệu 20
8/25/2017
Read Committed
Read Uncommitted
• Đặc điểm:
Đặc điểm:
• Đây là mức độ cô lập mặc định của SQL Server • Tạo Shared Lock trên đơn vị dữ liệu được đọc, Shared Lock được giải phóng
Không thiết lập Shared Lock trên những đơn vị dữ liệu cần đọc. Do đó không phải chờ khi đọc dữ liệu (kể cả khi dữ liệu đang bị lock bởi giao tác khác)
ngay sau khi đọc xong dữ liệu
Vẫn tạo Exclusive Lock trên đơn vị dữ liệu được ghi, Exclusive Lock được giữ
• Tạo Exclusive Lock trên đơn vị dữ liệu được ghi, Exclusive Lock được giữ cho
cho đến hết giao tác
đến hết giao tác
Ưu điểm:
•Tốc độ xử lý rất nhanh
Nhược điểm: Có khả năng xảy ra mọi vấn đề khi xử lý đồng thời :
Nhược điểm: • Chưa giải quyết được vấn đề Reads,
•Không cản trở những giao tác
Unrepeatable Phantoms,Lost Updates
khác thực hiện việc cập nhật dữ
• Phải chờ nếu đơn vị dữ liệu cần đọc
Ưu điểm: • Giải quyết vấn đề Dirty Reads • Shared Lock được giải phóng ngay, không cần phải giữ cho đến hết giao tác nên không cản trở nhiều đến thao tác cập nhật của các giao tác khác.
đang được giữ khoá ghi (xlock)
liệu
• Dirty Reads • Unrepeatable Reads • Phantoms • Lost Updates
Hệ quản trị Cơ sở dữ liệu 21 Hệ quản trị Cơ sở dữ liệu 22
Repeatable Read
Serializable
• Đặc điểm:
Đặc điểm: • Tạo Shared Lock trên đơn vị dữ liệu được đọc và giữ shared lock này đến hết giao
tác => Các giao tác khác phải chờ đến khi giao tác này kết thúc nếu muốn cập nhật, thay đổi giá trị trên đơn vị dữ liệu này .
• Tạo Shared Lock trên đơn vị dữ liệu được đọc và giữ shared lock này đến hết giao tác => Các giao tác khác phải chờ đến khi giao tác này kết thúc nếu muốn cập nhật, thay đổi giá trị trên đơn vị dữ liệu này .
hết giao tác.
• Tạo Exclusive Lock trên đơn vị dữ liệu được ghi, Exclusive Lock được giữ cho đến Nhược điểm:
• Không cho phép Insert những dòng dữ liệu thỏa mãn điều
•Chưa giải quyết được vấn đề Phantoms.
•Ưu điểm:
kiện • thiết
lập Shared Lock (sử dụng Key Range Lock) ==>
•Phải chờ nếu đơn vị dữ liệu cần đọc đang được
Giải quyết vấn đề Dirty Reads và
Serializable = Repeatable Read + Giải quyết Phantoms
giữ khoá ghi (xlock)
Unrepeatable Reads
• Tạo Exclusive Lock trên đơn vị dữ liệu được ghi, Exclusive
•Shared lock được giữ đến hết giao tác ==> cản
Lock được giữ cho đến hết giao tác.
trở việc cập nhật dữ liệu của các giao tác khác Hệ quản trị Cơ sở dữ liệu
6
23 Hệ quản trị Cơ sở dữ liệu 24
8/25/2017
Serializable (tt)
Bảng tóm tắt
Ưu điểm:
Giải quyết thêm được vấn đề Phantoms
Mức Isolation
Dirty read
Nonrepeatable read
Phantom read
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
Read Uncommitted
Yes
Yes
Yes
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
Read Committed
No
Yes
Yes
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
Repeatable read
No
No
Yes
Nhược điểm: • Phải chờ nếu đơn vị dữ liệu cần đọc đang được giữ khoá ghi (xlock) • Cản trở nhiều đến việc cập nhật dữ liệu của các giao tác khác
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
Serializable
No
No
No
Hệ quản trị Cơ sở dữ liệu 25 Hệ quản trị Cơ sở dữ liệu 26
3.3. Live lock
3.3. Live lock (tt)
• Khóa sống (live lock): khóa nhưng không giải phóng làm
cho các giao tác phải chờ vô tận
• T1 yêu cầu khóa trên B, T2 yêu cầu khóa trên B
• T1 yêu cầu trước nên B được T1 khóa, nhưng T1 không giải
phóng B nên T2 không thể khóa B mà phải chờ vô tận
7
Hệ quản trị Cơ sở dữ liệu 27 Hệ quản trị Cơ sở dữ liệu 28
8/25/2017
3.4. Dead lock
3.4. Dead lock (tt)
• Kỹ thuật ngăn ngừa deadlock
• Khóa chết (dead lock): trường hợp 2 hay nhiều giao tác chờ
• Ép người viết chương trình
đợi lẫn nhau. Giả sử T1 đang khóa A và chờ B được giải
viết
không
bao
giờ
phóng để khóa; trong khi T2 đang khóa B và chờ A được giải
deadLock có thể xảy ra
phóng để khóa A. Các yêu cầu khóa A,B như vậy dẫn đến sự
ngăn ngừa deadlock
• HQT theo
dõi
nếu
có
chờ trở nên vô hạn.
deadlock sẽ báo cho admin
biết để xử lý
Hệ quản trị Cơ sở dữ liệu 29 30
3.4. Dead lock (tt)
3.4. Dead lock (tt)
• Đồ thị chờ
• Giải quyết Deadlock
• Ngăn ngừa Deadlock
• Hủy tất cả không phải là
• Khi có trình trạng deadlock xảy ra, hệ thống hủy trình
trạng deadlock.
• Hủy
cách giải quyết tốt tác giao
gây
• Dùng đồ thị chờ để phát hiện deadlock
• Sắp xếp các đơn vị dữ liệu theo một thứ tự cố định và các giao tác yêu cầu lock trên chúng theo thứ tự này.
ra deadlock. Giao tác nào gây ra?
• Dùng thời gian chờ. • Dùng đồ thị chờ
• Các giao tác chờ lần nhau deadlock. Các transaction chờ theo 1 chiều nhất định ngăn ngừa deadlock.
• Cho S là lịch giao tác của các giao tác T1, T2,.., Tn. • Đồ thị có đỉnh là các giao tác. • Cung có hướng Ti Tj nếu Ti phải chờ Tj • Đồ thị có chu trình Deadlock
• Để giải quyết: hủy đỉnh (ứng với giao tác) có nhiều cung vào ra
nhất.
8
31 32
8/25/2017
Ví dụ
Ví dụ
T2
T3
T4
T2
T3
T4
T1 L(A); R(A)
T1 L(A); R(A)
L(C); R(C)
L(C); R(C)
L(B); R(B)
L(B); R(B)
L(D); R(D)
L(D); R(D)
L(A)
L(A)
L(C)
L(C)
Chờ
L(A)
L(A)
Chờ
1 2 3 4 5 6 7 8
L(B)
1 2 3 4 5 6 7 8
L(B)
Chờ
Chờ
T2
T3
T4
T1
T1
T2
T3
T4
33 34
Giải quyết deadlock trong SQL server
9
Hệ quản trị Cơ sở dữ liệu 35 Hệ quản trị Cơ sở dữ liệu 36