Tải bản đầy đủ (.pdf) (40 trang)

Quản lý truy xuất đồng thời

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (11.03 MB, 40 trang )

Quản lý truy xuất
đồng thời

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 T2 Tranh chấp ?
Read(A) Read(A) No
Write(A) Write(A) Mất cập nhật
Write(A) Read(A) Đọc dữ liệu chưa xác nhận
Read(A) Write(A) Đọ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:C1=C1-50 T2:READ(C2) T1:C1=C1-50
T1:WRITE(C1) T1:C1=C1-50 T2:READ(C2)
T1:READ(C2) T2:C2=C2-70 T1:WRITE(C1)
T1:C2=C2+50 T1:WRITE(C1) T2:C2-70
T1:WRITE(C2) T2:WITE(C2) T1:READ(C2)
T2:READ(C2) T1:READ(C2) T2:WRITE(C2)
T2:C2=C2-70 T2:READ(C3) T1:C2=C2+50
T2:WRITE(C2) T2:C2=C2+50 T2:READ(C3)
T2:READ(C3) T2:C3=C3+70 T1:WRITE(C2)
T2:C3=C3+70 T1:WRITE(C2) T2:C3=C3+70
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 T2 T1 T2
Lock(A) Lock(A)
READ(A) READ(A)
Lock(A) Lock(B)
Read(A) Read(B)
Lock(B) Lock(B)
Read(B) Read(B)
Lock(B) Lock(A)
Read(B) 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 PB LUONG
N1 D1 50
N2 D1 45
N3 D2 25
N4 D2 30
N5 D2 48
T1
A1 SELECT MAX(LUONG)
FROM NV
WHERE PB=D1
A2 SELECT MAX(LUONG)
FROM NV
WHERE PB=D2
T2
B1 INSERT INTO NV VALUES(N6,D1,52)
B2 DELETE FROM NV WHERE MSNV=N5
Vấn đề bóng ma (tt.)
Lịch 1 Lịch 2 Lịch 3
A1 B1 A1
A2 B2 B1
B1 A1 B2
B2 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 T2
(1) Lock(X)ok
(2) Lock(Y) ok
(3) Lock(Y) chờ
(4) 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 Dirty
read
Unrepeate
d read
Phantom
READ
UNCOMMITED
Posible Posible Posible
READ
COMMITED

NO NO Posible
REPEATABLE
READ
NO NO Posible
SERIALIZABLE 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 T2 T3
Lock(A)
Lock(B)
Lock(D)
Unlock(B)
Lock(B)
Lock(E)

Unlock(D)
Lock(F)
Unlock(A)
Lock(G)
Unlock(C)
Unlock(E)
Lock(E)
Unlock(F)
Unlock(B)
Unlock(G)
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

×