Hồ Bảo Quốc
Khoa công nghệ thông tin
Đại học Khoa học tự nhiên
Khái niệm giao tác (transaction)
Một giao tác = nhóm các thao tác lên CSDL
T : begin transation
○
A1
○
A2
○
…
○
An
○
T : End transaction
Tính chất của giao tác
Nguyên tố (Atomicity)
Nhất quán (Cohesion)
Độc lập (Isolation)
Bền vững (Durability)
T biến CSDL từ trạng thái nhất quán E sang trạng
thái nhất quán E’
giao tác
Các thao tác đặc biệt
Begin transaction
End Transaction (commit, vadidation)
Annulation (rollback, abort)
Các tình huống của một giao tác
Kết thúc bình thường
Bị hủy do yếu tố bên ngoài (sự cố, tranh
chấp)
Tự hủy (abort)
Giao tác
Góc nhìn ứng dụng
Công cụ cho người lập trình
Quản lý tính nhất quán của CSDL
Bảo đảm các ràng buộc tòan vẹn
Góc nhìn hệ thống
Giao tác như một tiến trình
Đơn vị xử lý
Quản lý tranh chấp
Quản lý sự cố và khôi phục sau sự cố
Điều khiển tranh chấp
Tranh chấp
Các khái niệm quan trọng
◦
Tập hợp các đối tượng được đọc bởi T : READS(T)
◦
Tạp hợp các đối tượng được ghi bởi T : WRITES(T)
Các tranh chấp có thể giữa Ti và Tj :
WRITES(Ti) ∩READS(Tj) ≠ ∅
WRITES(Ti) ∩WRITES(Tj) ≠ ∅
Hình thức hóa dựa trên khái niệm « khả tuần tự »
T1
T1
T2
T2
Tranh ch p ?ấ
Tranh ch p ?ấ
Read(A)
Read(A)
Read(A)
Read(A)
OK
OK
Write(A)
Write(A)
Write(A)
Write(A)
M t c p nh tấ ậ ậ
M t c p nh tấ ậ ậ
Write(A)
Write(A)
Read(A)
Read(A)
Đ c d li u ch a xác ọ ữ ệ ư
Đ c d li u ch a xác ọ ữ ệ ư
nh nậ
nh nậ
Read(A)
Read(A)
Write(A)
Write(A)
Đ c không th đ c l iọ ể ọ ạ
Đ c không th đ c l iọ ể ọ ạ
Hình thức hóa vấn đề
Giao tác Ti = chuổi các hành động (READ,WRITE)
Thực hiện đồng thời N giao tác : thứ tự thực hiện (lịch) theo
thời gian các hành động của các giao tác này
Đồ thị phụ thuộc DEP(S)={(T1,A,T2) |A1=WRITE và
A2=WRITE
A1=WRITE và
A2=READ
A1=READ và
A2=WRITE}
Lịch
Tuần tự : <T1><T2><T3>….<Tn>
Không tuần tự
Định nghĩa
Lịch tuần tự = nhất quán
Liệu có tồn tại các lịch không tuần tự nhất quán
Có : nếu đồ thị phụ thuộc không có chu trình
Lịch và tính nhất quán
T1:READ(C1)
T1:READ(C1)
T1:READ(C1)
T1:READ(C1)
T1:READ(C1)
T1:READ(C1)
T1:C1=C1-50
T1:C1=C1-50
T2:READ(C2)
T2:READ(C2)
T1:C1=C1-50
T1:C1=C1-50
T1:WRITE(C1)
T1:WRITE(C1)
T1:C1=C1-50
T1:C1=C1-50
T2:READ(C2)
T2:READ(C2)
T1:READ(C2)
T1:READ(C2)
T2:C2=C2-70
T2:C2=C2-70
T1:WRITE(C1)
T1:WRITE(C1)
T1:C2=C2+50
T1:C2=C2+50
T1:WRITE(C1)
T1:WRITE(C1)
T2:C2-70
T2:C2-70
T1:WRITE(C2)
T1:WRITE(C2)
T2:WITE(C2)
T2:WITE(C2)
T1:READ(C2)
T1:READ(C2)
T2:READ(C2)
T2:READ(C2)
T1:READ(C2)
T1:READ(C2)
T2:WRITE(C2)
T2:WRITE(C2)
T2:C2=C2-70
T2:C2=C2-70
T2:READ(C3)
T2:READ(C3)
T1:C2=C2+50
T1:C2=C2+50
T2:WRITE(C2)
T2:WRITE(C2)
T2:C2=C2+50
T2:C2=C2+50
T2:READ(C3)
T2:READ(C3)
T2:READ(C3)
T2:READ(C3)
T2:C3=C3+70
T2:C3=C3+70
T1:WRITE(C2)
T1:WRITE(C2)
T2:C3=C3+70
T2:C3=C3+70
T1:WRITE(C2)
T1:WRITE(C2)
T2:C3=C3+70
T2:C3=C3+70
T2:WRITE(C3)
T2:WRITE(C3)
T2:WRITE(C3)
T2:WRITE(C3)
T2:WRITE(C3)
T2:WRITE(C3)
Tuần tự nhất quán Không tuần tự nhất quán Không tuần tự không nhất quán
Nghi thức khóa
Nguyên tắc : trước khi đọc hoặc viết một
đối tượng phải yêu cầu khóa đối tượng
đó
Lock(A)
Unlock(A)
Nếu đối tượng tự do OK, ngược lại thì
chờ
Các kỹ thuật chính để điều khiển
truy xuất đồng thời
Khóa hai giai đoạn
Khóa phân cấp đơn giản
Kỹ thuật nhãn thời gian
Kỹ thuật nhãn thời gian nhiều phiên bản
Điều khiển tranh chấp optimistic
Nghi thức khóa hai gia đọan
Hai lọai khóa
Khóa chia sẽ đọc: shared Lock
Khóa để viết exclusif Lock
Giao tác thỏa nghi thức khóa hai giai
đọan(2PL)
Các giao tác khác nhau không thể giữ đồng thời
các khóa có tranh chấp (shared lock + exclusif
lock hoặc 2 exclusif lock)
Một giao tác khi unlock một khóa thì không thể
phát ra yêu cầu khóa nửa
Định lý
Nếu trong một lịch tất cả các giao tác
đều thỏa nghi thức khóa hai giai đọan
thì tương đương với một lịch tuần tự
(khả tuần tự)
Đồ thị phụ thuộc – điều kiện đủ
T1
T1
T2
T2
T1
T1
T2
T2
Lock(A)
Lock(A)
Lock(A)
Lock(A)
READ(A)
READ(A)
READ(A)
READ(A)
Lock(A)
Lock(A)
Lock(B)
Lock(B)
Read(A)
Read(A)
Read(B)
Read(B)
Lock(B)
Lock(B)
Lock(B)
Lock(B)
Read(B)
Read(B)
Read(B)
Read(B)
Lock(B)
Lock(B)
Lock(A)
Lock(A)
Read(B)
Read(B)
Read(A)
Read(A)
T1 T2 T1
T2
(a)
(b)
(b) Có chu trình => không khả tuần tự
(a) Và (b) tương đương nhau về mặt công việc
Vấn đề bóng ma (Phantom)
Relation
NV(MSNV,PB,LUONG)
MSVN
MSVN
PB
PB
LUONG
LUONG
N1
N1
D1
D1
50
50
N2
N2
D1
D1
45
45
N3
N3
D2
D2
25
25
N4
N4
D2
D2
30
30
N5
N5
D2
D2
48
48
T1
T1
A1
A1
SELECT MAX(LUONG)
SELECT MAX(LUONG)
FROM NV
FROM NV
WHERE PB=D1
WHERE PB=D1
A2
A2
SELECT MAX(LUONG)
SELECT MAX(LUONG)
FROM NV
FROM NV
WHERE PB=D2
WHERE PB=D2
T2
T2
B1
B1
INSERT INTO NV VALUES(N6,D1,52)
INSERT INTO NV VALUES(N6,D1,52)
B2
B2
DELETE FROM NV WHERE MSNV=N5
DELETE FROM NV WHERE MSNV=N5
Vấn đề bóng ma (tt.)
L ch 1ị
L ch 1ị
L ch 2ị
L ch 2ị
L ch 3ị
L ch 3ị
A1
A1
B1
B1
A1
A1
A2
A2
B2
B2
B1
B1
B1
B1
A1
A1
B2
B2
B2
B2
A2
A2
A2
A2
Lịch 3 không khả tuần tự
T1 không thể khóa các bộ chưa tồn tại
Khóa tòan bộ quan hệ để tránh việc thêm và xóa bộ
Khóa chết (Deadlock)
T1
T1
T2
T2
(1)
(1)
Lock(X)ok
Lock(X)ok
(2)
(2)
Lock(Y) ok
Lock(Y) ok
(3)
(3)
Lock(Y) chờ
Lock(Y) chờ
(4)
(4)
Lock(X) chờ
Lock(X) chờ
T1 chờ T2; T2 chờ T1 => khóa chết
Các giải pháp xử lý khóa
chết
Phát hiện khóa chết
Xây dựng đồ thị chờ (waiting graph)
○
Nút = Giao tác
○
Cung : Ti → Tj nếu Tj chờ Ti
Phát hiện chu trình trong đồ thị
Chọn một giao tác để hủy (abort)
Thực hiện lại giao tác bị hủy sau đó
Ngăn ngừa khóa chết
Nghi thức khóa hai giai đọan nghiêm ngặt
(strict-2PL)
SQL và giao tác
Bắt đầu giao tác tường minh (Begin Transaction)
Kết thúc một giao tác
Định ngầm (sau mỗi lệnh)
Tường minh : COMMIT hoặc ROLLBACK
Lọai và cấp độ độc lập của một giao tác
Lệnh khóa và giải phóng tường minh
Đơn vị khóa ? Bộ, quan hệ trang, đọan
Khóa phân cấp
SQL2: SET TRANSACTION <mode><isolation>
mode:
READ ONLY
READ WRITE
Isolation level
SQL2:Mức độ độc lập
SERIALIZABLE :
T thỏa nghi thức khóa 2 giai đọan.
REPEATABLE READ :
T chỉ chỉ đọc các đối tượng của các giao tác đã commit.
Không có một đối tượng nào được T đọc hoặc sửa đổi
lại được sửa đổi bơi một giao tác khác
READ COMMITED : như REPEADTABLE READ
nhưng cho phép một giao tác khác sửa các đối
tượng mà T đã đọc hoặc sửa đổi
READ UNCOMMITED : T có thể đọc các đối
tượng đang bị thay đổi bởi các giao tác khác
Ví dụ
SET TRANSACTION READ ONLY ISOLATION LEVEL SERIALIZABLE
SET TRANSACTION READ WRITE ISOLATION LEVEL READ COMMITED
SQL2: Isolation level
M cứ
M cứ
Dirty
Dirty
read
read
Unrepeate
Unrepeate
d read
d read
Phantom
Phantom
READ
READ
UNCOMMITED
UNCOMMITED
Posible
Posible
Posible
Posible
Posible
Posible
READ
READ
COMMITED
COMMITED
NO
NO
NO
NO
Posible
Posible
REPEATABLE
REPEATABLE
READ
READ
NO
NO
NO
NO
Posible
Posible
SERIALIZABLE
SERIALIZABLE
NO
NO
NO
NO
NO
NO
Khóa trên cây phân cấp
Ý chính : các đối tượng của CSDL được
tổ chức phân cấp
Hai phương thức:
Khóa một nút trên cấy phân cấp không ảnh
hưởng đến các nút con của nó
Khóa một nút của cây dẫn đến việc khóa tất
cả các nút con của nút đó
Khóa phân cấp đơn giản
Nghi thức :
Ngọai trừ nút gốc, một giao tác chỉ có thể
khóa một nút nếu nó đă giữ một khóa trên
nút cha của nút đó
Không một nút nào bị khóa hai lần bởi cùng
một giao dịch
Một lịch lập từ các giao tác thỏa nghi
thức khóa phân cấp đơn giản thì khả
tuần tự
Ví dụ
T1
T1
T2
T2
T3
T3
Lock(A)
Lock(A)
Lock(B)
Lock(B)
Lock(D)
Lock(D)
Unlock(B)
Unlock(B)
Lock(B)
Lock(B)
Lock(E)
Lock(E)
Unlock(D)
Unlock(D)
Lock(F)
Lock(F)
Unlock(A)
Unlock(A)
Lock(G)
Lock(G)
Unlock(C)
Unlock(C)
Unlock(E)
Unlock(E)
Lock(E)
Lock(E)
Unlock(F)
Unlock(F)
Unlock(B)
Unlock(B)
Unlock(G)
Unlock(G)
Unlock(E)
Unlock(E)
A
B C
D E
F G
T1 T2
T3
Khóa phân cấp tòan bộ một cây con
Lock, Khóa một nút => khóa tất cả các
nút con trên các mức con của nút đó
Warn, đặt một cảnh báo trên các nút
« cấp trên » của nút xin khóa để tránh
tranh chấp
Unlock, giải phóng một Lock hoặc Warn
Nghi thức cảnh báo
Nghi thức
Bắt đầu bằng đặt một Lock hoặc một Warn tại nút
gốc
Chỉ đặt được một lock hoặc một Warn trên một mục
khi đă giữ một cảnh báo trên nút cha của nút đó
Chỉ giải phóng một Lock hoặc một Warn khi không
còn giữ một khóa hoặc một cảnh báo nào trên các
nút con của nút đó
Tuân theo nghi thức 2PL
Định lý : Một lịch lập từ n giao tác tuân thủ
nghi thức cảnh báo thì khả tuần tự
Các giao tác được phân tán
Một giao tác kích họat tại một vị trí sẽ tạo
ra các giao tác trên các các vị trí khác như
các giao tác cục bộ
Giao tác tòan cục = hội của nhiều giao tác
cục bộ
Vị trí giao tác tòan cục kích hoạt giữ vai trò
« người điều phối »
Các ví trí có các giao tác cục bộ phát sinh
được gọi là các « người tham dự »
Giao tác tòan cục COMMIT khi và chỉ khi
tất cả các giao tác cục bộ COMMIT tại các
nút tham gia