Quản lý truy xuất
đồng thời
Nội dung
Các vấn đề trong truy xuất đồng thời
Kỹ thuật khóa (Locking)
Kỹ thuật nhãn thời gian (Timestamps)
Kỹ thuật xác nhận hợp lệ (Validation)
Nội dung
Các vấn đề trong truy xuất đồng thời
Kỹ thuật khóa (Locking)
Kỹ thuật nhãn thời gian (Timestamps)
Kỹ thuật xác nhận hợp lệ (Validation)
Các vấn đề trong truy xuất đồng thời
Mất dữ liệu đã cập nhật (lost updated)
Không thể đọc lại (unrepeatable read)
Bóng ma (phantom)
Đọc dữ liệu chưa chính xác (dirty read)
Mất dữ liệu đã cập nhật
(lost updated)
Xét 2 giao tác
Giả sử T1 và T2 được thực hiện đồng thời
T
2
Read(A)
A:=A+20
Write(A)
T
1
Read(A)
A:=A+10
Write(A)
t
1
t
2
t
3
t
4
t
5
t
6
Read(A)
A=50
T
2
T
1
Read(A)
A:=A+10
Write(A)
A:=A+20
Write(A)
A=60
A=70
Dữ liệu đã cập
nhật tại t
4
của T
1
bị mất vì đã bị ghi
chồng lên ở thời
điểm t
6
Không thể đọc lại
(unrepeatable read)
Xét 2 giao tác
Giả sử T1 và T2 được thực hiện đồng thời
T
2
Read(A)
Print(A)
Read(A)
Print(A)
T
1
Read(A)
A:=A+10
Write(A)
t
1
t
2
t
3
t
4
t
5
t
6
Read(A)
A=50
T
2
T
1
Read(A)
A:=A+10
Write(A)
Print(A)
Read(A)
t
7
Print(A)
A=50
A=50
A=60
A=60
T
2
tiến hành
đọc A hai lần
thì cho hai kết
quả khác nhau
Bóng ma (phantom)
Xét 2 giao tác T1 và T2 được xử l{ đồng thời
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?
mất 50 ???
t
1
t
2
t
3
t
4
t
5
t
6
Read(A)
T
2
T
1
Read(A)
A:=A-50
Write(A)
Read(B)
Print(A+B)
t
7
Read(B)
A=70
A=20
A+B=70
A=70, B=50
A=20
B=50
B:=B+50
Write(B)
t
8
t
9
Đọ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
t
1
t
2
t
3
t
4
t
5
t
6
Read(A)
T
2
T
1
Read(A)
A:=A+10
Write(A)
Print(A)
Abort
T
2
đã đọc dữ liệu được ghi bởi T
1
nhưng sau đó T
1
yêu cầu hủy việc ghi
Nội dung
Các vấn đề trong truy xuất đồng thời
Kỹ thuật khóa (Locking)
Khóa 2 giai đoạn
Khóa đọc viết
Khóa đa hạt
Nghi thức cây
Kỹ thuật nhãn thời gian (Timestamps)
Kỹ thuật xác nhận hợp lệ (Validation)
Kỹ thuật khóa
Làm thế nào để bộ lập lịch ép buộc 1 lịch phải
khả tuần tự?
Bộ lập lịch với cơ chế khóa (locking scheduler)
Có thêm 2 hành động
• Lock
• Unlock
Scheduler
Lock
table
Lịch khả tuần
tự
T
1
T
2
… T
n
Kỹ thuật khóa
Các giao tác trước khi muốn đọc/viết lên 1 đơn vị dữ liệu phải phát
ra 1 yêu cầu xin khóa (lock) đơn vị dữ liệu đó
Lock(A) hay l(A)
Yêu cầu này được bộ phận quản l{ khóa xử l{
Nếu yêu cầu được chấp thuận thì giao tác mới được phép đọc/ghi lên
đơn vị dữ liệu
Sau khi thao tác xong thì giao tác phải phát ra lệnh giải phóng đơn
vị dữ liệu (unlock)
Unlock(A) hay u(A)
Element Transaction
A T
1
Lock table
… …
Lock Manager
T
1
: Lock(A)
Kỹ thuật khóa
Qui tắc
Giao tác đúng đắn
Lịch thao tác hợp lệ
T
i
: … l(A) … r(A) / w(A) … u(A) …
S : … l
i
(A) ……………… u
i
(A) …
không có l
j
(A)
Kỹ thuật khóa
Ví dụ
T
2
T
1
Read(A,s)
s:=s*2
t:=t+100
Read(A,t)
t:=t+100
Write(A,t)
Read(B,t)
Write(B,t)
s:=s*2
Write(A,s)
Read(B,s)
Write(B,s)
S
Lock(A)
Unlock(A)
Lock(A)
Unlock(A)
Lock(B)
Unlock(B)
Lock(B)
Unlock(B)
Kỹ thuật khóa
Cho biết lịch có hợp lệ? Giao tác nào là đúng?
T
2
T
1
Read(B)
Read(A)
Write(B)
Write(B)
Read(B)
S
1
Lock(A)
Unlock(A)
Unlock(B)
Lock(B)
Unlock(B)
Lock(B)
Unlock(B)
T
3
T
2
T
1
Read(B)
Read(A)
Write(B)
Read(B)
S
2
Lock(A)
Unlock(A)
Lock(B)
Lock(B)
Unlock(B)
Unlock(B)
T
3
Lock(B)
Write(B)
Kỹ thuật khóa
Cho biết lịch có hợp lệ? Giao tác nào là đúng?
T
2
T
1
Read(B)
Read(A)
Write(B)
Write(B)
Read(B)
S
3
Lock(A)
Unlock(A)
Lock(B)
Unlock(B)
Lock(B)
Unlock(B)
Lock(B)
Unlock(B)
T
3
Kỹ thuật khóa
Nếu lịch S hợp lệ thì S có khả tuần tự không?
Write(B,s); Unlock(B)
T
2
T
1
s:=s*2
t:=t+100
t:=t+100
Write(A,t); Unlock(A)
Write(B,t); Unlock(B)
s:=s*2
Write(A,s); Unlock(A)
S
Lock(A); Read(A,t)
Lock(A); Read(A,s)
Lock(B); Read(B,s)
Lock(B); Read(B,t)
A B
25 25
125
50
250
150
Kỹ thuật khóa
Kiểm tra tính khả tuần tự
Input : Lịch S được lập từ n giao tác xử l{ đồng thời
T
1
, T
2
, …, T
n
theo kỹ thuật khóa đơn giản
Output : S khả tuần tự hay không?
Xây dựng 1 đồ thị có hướng G
Mỗi giao tác T
i
là 1 đỉnh của đồ thị
Nếu một giao tác T
j
phát ra Lock(A) sau một giao tác T
i
phát ra Unlock(A) thì sẽ vẽ cung từ T
i
đến T
j
, i≠j
S khả tuần tự nếu G không có chu trình
Kỹ thuật khóa
B3
G không có chu trình => S khả
tuần tự
theo thứ tự T
1
thực hiện trước
rồi tới T
2
G B2
T
1
T
2
S
T
2
T
1
Read(A)
Read(A)
A:=A-10
Print(A)
Write(A)
Read(A)
Print(A)
Lock(A)
Unlock(A)
Lock(A)
Unlock(A)
T
2
B1
T
1
Kỹ thuật khóa
B3
G có chu trình => S không khả
tuần tự
theo thứ tự T
1
thực hiện trước
rồi tới T
2
T
2
B1
T
1
T
2
T
1
Read(A,s)
s:=s*2
t:=t+100
Read(A,t)
t:=t+100
Write(A,t)
Read(B,t)
Write(B,t)
s:=s*2
Write(A,s)
Read(B,s)
Write(B,s)
S
Lock(A)
Unlock(A)
Lock(A)
Unlock(A)
Lock(B)
Unlock(B)
Lock(B)
Unlock(B)
G B2
T
1
T
2
Nội dung
Các vấn đề trong truy xuất đồng thời
Kỹ thuật khóa (Locking)
Khóa 2 giai đoạn
Khóa đọc viết
Khóa đa hạt
Nghi thức cây
Kỹ thuật nhãn thời gian (Timestamps)
Kỹ thuật xác nhận hợp lệ (Validation)
Kỹ thuật khóa 2 giai đoạn
(2PL: 2 phase lock)
Qui tắc
Giao tác 2PL
S : … l
i
(A) ………………… u
i
(A) …
không có lock không có unlock
t
EOT BOT
Phase lock Phase
unlock
Đơn vị
dữ liệu
giữ
lock
của T
i
Thực hiện xong hết tất
cả các yêu cầu lock rồi
mới tiến hành unlock
Kỹ thuật khóa 2 giai đoạn
T
1
Lock(A)
Read(A)
Lock(B)
Read(B)
B:=B+A
Write(B)
Unlock(A)
Unlock(B)
T
2
Lock(B)
Read(B)
Lock(A)
Read(A)
A:=A+B
Write(A)
Unlock(A)
Unlock(B)
T
3
Lock(B)
Read(B)
B=B-50
Write(B)
Unlock(B)
Lock(A)
Read(A)
A=A+50
Write(A)
Unlock(A)
T
4
Lock(A)
Read(A)
Unlock(A)
Lock(B)
Read(B)
Unlock(B)
Print(A+B)
Thỏa nghi thức khóa
2 giai đoạn Không thỏa nghi thức
khóa 2 giai đoạn
Kỹ thuật khóa 2 giai đoạn
T
2
T
1
S
Write(B,t);Unlock(B)
Read(B,t); t:=t+100
t:=t+100; Write(A,t)
Lock(A);Read(A,t)
Lock(B);Unlock(A)
Lock(B); Ulock(A)
Read(B,t); t:=t*2
Write(B,t); Unlock(B)
s:=s*2; Write(A,s)
Lock(A); Read(A,s)
Lock(B)
Chờ
T
2
T
1
Read(A,s)
s:=s*2
t:=t+100
Read(A,t)
t:=t+100
Write(A,t)
Read(B,t)
Write(B,t)
s:=s*2
Write(A,s)
Read(B,s)
Write(B,s)
S
Kỹ thuật khóa 2 giai đoạn
Định l{
S thỏa qui tắc (1), (2), (3) S conflict-serializable
Chứng minh
Giả sử G(S) có chu trình
T
1
T
2
… T
n
T
1
T
1
thực hiện lock những đơn vị dữ liệu được unlock bởi T
n
T
1
có dạng … lock … unlock … lock
Điều này vô l{ vì T
1
là giao tác thỏa 2PL
G(S) không thể có chu trình
S conflict-serializable
Kỹ thuật khóa 2 giai đoạn
Chú ý
T
2
T
1
s:=s*2
S
Lock(B)
Lock(A)
t:=t+100
Read(A,t)
Lock(B)
Write(A,t)
Write(B,s)
Không xin
được lock
Chờ
Lock(A)
Read(B,s)
Không xin
được lock
Chờ