Bài giảng Hệ quản trị cơ sở dữ liệu - Chương II: Quản lý truy xuất đồng thời
Tóm tắt Bài giảng Hệ quản trị cơ sở dữ liệu - Chương II: Quản lý truy xuất đồng thời: ...rước nó hoàn tất Thực hiện đồng thời Cho phép nhiều giao tác cùng truy xuất dữ liệu Gây ra nhiều phức tạp về nhất quán dữ liệu Tuy nhiên có 2 lý do để thực hiện đồng thời: Tận dụng tài nguyên và thông lượng Giảm thời gian phản hồi của các giao tác 37 Hai lý do để thực hiện đồng ... dụ S1:R2(Z),W2(X),W2(Y),W1(X),R1(X),R3(X),R3(Z),R3(Y) Khả tuần tự vì đồ thị không có chu trình 72 Bài tập T2T1 Read(A) Read(B) Write(A) Write(B) S T3 Read(A) Write(A) Read(B) Write(B) T2 S T3 2 3 T1 S T2 1 2 73 Lịch có khả tuần tự không? Bài tập T2T1 Read(A) Read(...li(A) ui(A) không có lockkhông có unlock 101 Kỹ thuật khóa 2 giai đoạn (tt) T1 Lock(A) Read(A) Lock(B) Read(B) B:=B+A Write(B) Unlock(A) Unlock(B) T2 Lock(B) Read(B) Lock(A) Read(A) A:=A+B Write(A) Unlock(A) Unlock(B) Thỏa nghi thức khóa 2 giai đoạn T3 Lock(B) Read(B) B...
h biểu sau là khả tuần tự S={W2(X), R1(X), W1(X), C1, R3(X), W2(X), R3(Y), R2(Z),C2, R3(Z), C3} 70 Ví dụ S1: W2(X),W1(X),R3(X),R1(X),W2(Y),R3(Y),R3(X),R2(X) Bất khả tuần tự vì đồ thị có chu trình 71 Ví dụ S1:R2(Z),W2(X),W2(Y),W1(X),R1(X),R3(X),R3(Z),R3(Y) Khả tuần tự vì đồ thị không có chu trình 72 Bài tập T2T1 Read(A) Read(B) Write(A) Write(B) S T3 Read(A) Write(A) Read(B) Write(B) T2 S T3 2 3 T1 S T2 1 2 73 Lịch có khả tuần tự không? Bài tập T2T1 Read(A) Read(B) Write(A) Write(B) S T3 Read(A) Write(A) Read(B) Write(B) Lịch có khả tuần tự không? 74 Bài tập 75 T2T1 Read(A) Write(A) S T4 Read(A) Write(A) T3 Vẽ P(S) S có conflict-serializable không? Bài tập 76 T2T1 Read(A) Read(C) Write(A) Write(C) S T4 Read(A) Write(A) Write(D) Write(B) T3 Vẽ P(S) S có conflict-serializable không? View-Serializability 77 Xét lịch S T2T1 Write(A) S Write(A) T3 Read(A) Write(A) 1 2 3 P(S) có chu trình S không conflict-serializable View-Serializability (tt) 78 So sánh lịch S và 1 lịch tuần tự S’ Trong S và S’ đều có T1 thực hiện read(A) T2 và T3 không đọc A Kết quả của S và S’ giống nhau T2T1 Write(A) S Write(A) T3 Read(A) Write(A) Không conflict-serializable T2T1 Write(A) S’ Write(A) T3 Read(A) Write(A) Serial Giải thích như thế nào đây? View-Serializability (tt) 79 Ý tưởng Xét trường hợp Nhận xét Sau khi T ghi A xong mà không có giao tác nào đọc giá trị của A Khi đó, hành động wT(A) có thể chuyển đến 1 vị trí khác trong lịch thao tác mà ở đó cũng không có giao tác nào đọc A Ta nói Hành động rU(A) có gốc là giao tác T T U Write(A) Read(A) View-Serializability (tt) 80 Định nghĩa S, S’ là những lịch thao tác view-equivalent 1- Nếu trong S có wj(A) rj(A) thì trong S’ cũng có wj(A) rj(A) 2- Nếu trong S có ri(A) là thao tác đọc giá trị ban đầu của A thì trong S’ cũng ri(A) đọc giá trị ban đầu của A 3- Nếu trong S có wi(A) là thao tác ghi giá trị sau cùng lên A thì trong S’ cũng có wi(A) ghi giá trị sau cùng lên A Một lịch thao tác S là view-serializable Nếu S là view-equivalent với một lịch thao tác tuần tự nào đó S view-serializable S conflict-serializable S view-serializable S conflict-serializable??? View-Serializability (tt) 81 S conflict-serializable S view-serializable Chứng minh Hoán vị các hành động không xung đột Không làm ảnh hưởng đến những thao tác đọc Cũng không làm ảnh hưởng đến trạng thái CSDL View-Serializability (tt) 82 S view-serializable S conflict-serializable Trong S có những hành động ghi không có tác dụng (useless) S = w2(A) w3(A) Không có hành động đọc A T2T1 Write(A) S Write(A) T3 Read(A) Write(A) View-Serializability (tt) 83 View-Serializability (tt) 84 Quan sát lịch S thấy các giao dịch T4 và T6 thực hiện các giao tác write (A) mà không thực hiện một lệnh Read (A) nào. Các thao tác này gọi là thao tác mù. Các thao tác ghi mù xuất hiện trong một lịch biểu view- serializability nào đó thì lịch biểu không conflict serializability Các kỹ thuật khóa dữ liệu Giới thiệu Kỹ thuật khóa đơn giản Kỹ thuật khóa đọc ghi Kỹ thuật khóa 2 pha 85 Giới thiệu 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) 86 Kỹ thuật khóa đơn giản Nếu xuất hiện 2 giao tác tương tranh thì áp dụng cơ chế chờ: một giao tác xử lý hạt dữ liệu A sẽ khóa hạt dữ liệu này cho đến khi hòan tất. Các giao tác còn lại phải chờ cho đến khi hạt dữ liệu này được giải phóng Trước khi muốn thao tác lên 1 đơn vị dữ liệu A thì phải phát ra 1 yêu cầu xin khóa trên A Nếu yêu cầu trên khóa A được chấp thuận thì được thao tác trên A (Lock). Sau khi thao tác xong thì phải phải phát ra lệnh giải phóng A (Unlock) Nếu yêu cầu trên khóa không được chấp thuận thì chờ Hai kiểu khóa Khóa đọc (Read lock): chỉ cho phép một giao tác đọc Khóa ghi (Write lock): cho phép cả hai giao tác đọc và ghi Bộ phận cấp phát khóa (lock manager) sẽ chỉ cấp phát trên A nếu A tự do87 Kỹ thuật khóa đơn giản (tt) Nguyên tắc khóa Giao tác chỉ có thể đọc hoặc ghi trên đơn vị dữ liệu nếu trước đó có yêu cầu lock trên đơn vị dữ liệu và chưa nhả lock. Nếu giao tác đã lock trên dvdt thì sau đó phải unlock Tính hợp lệ Không thể có 2 giao tác đồng thời khóa trên 1 đvdl 88 Kỹ thuật khóa đơn giản (tt) 89 Ví dụ lịch hợp lệ và giao tác đúng 90 T2T1 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) Ví dụ Nếu lịch S hợp lệ thì S có khả tuần tự không? 91 Write(B,s); Unlock(B) T2T1 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 Bài tập 92 Cho biết lịch nào hợp lệ? Giao tác nào là đúng? T2T1 Read(B) Read(A) Write(B) Write(B) Read(B) S1 Lock(A) Unlock(A) Lock(B) Unlock(B) Lock(B) Unlock(B) Lock(B) Unlock(B) T3 T2T1 Read(B) Read(A) Write(B) Write(B) Read(B) S2 Lock(A) Unlock(A) Lock(B) Lock(B) Unlock(B) Unlock(B) T3 Bài tập 93 Cho biết lịch nào hợp lệ? Giao tác nào là đúng? T2T1 Read(B) Read(A) Write(B) Write(B) Read(B) S3 Lock(A) Unlock(A) Lock(B) Unlock(B) Lock(B) Unlock(B) Lock(B) Unlock(B) T3 Kỹ thuật khóa đơn giản (tt) Các trường hợp cần tránh 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 Khóa chết (dead lock): trường hợp 2 hay nhiều giao tác chờ đợi lẫn nhau. Giả sử T1 đang khóa A và chờ B được giải phóng để khóa; trong khi T2 đang khóa B và chờ A được giải phóng để khóa A. Các yêu cầu khóa A,B như vậy dẫn đến sự chờ trở nên vô hạn. 94 Ví dụ Live-Lock Để giải quyết vấn đề này thì lock Manager phải tinh tế hơn bằng cách ghi nhận thứ tự xin khóa 95 Ví dụ DeadLock Kỹ thuật ngăn ngừa deadlock Ép người viết chương trình viết không bao giờ deadLock có thể xảy ra ngăn ngừa deadlock HQT theo dõi nếu có deadlock sẽ báo cho admin biết để xử lý 96 Giải phát cho DeadLock 97 Giải quyết Deadlock Hủy tất cả không phải là cách giải quyết tốt Hủy giao tác gây ra deadlock. Giao tác nào gây ra? Dùng thời gian chờ. Dùng đồ thị chờ Ngăn ngừa 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. 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. Đồ thị chờ 98 Khi có trình trạng deadlock xảy ra, hệ thống hủy trình trạng deadlock. Dùng đồ thị chờ để phát hiện 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. Ví dụ 99 T1 T2 L(A); R(A) L(C); R(C) 1 T3 T4 L(B); R(B) L(D); R(D) 2 3 4 5 6 7 8 L(A) L(C) L(A) L(B) Chờ Chờ Chờ Chờ T 2 T 1 T 3 T 4 Ví dụ 100 T 2 T 1 T 3 T 4 T1 T2 L(A); R(A) L(C); R(C) 1 T3 T4 L(B); R(B) L(D); R(D) 2 3 4 5 6 7 8 L(A) L(C) L(A) L(B) Kỹ thuật khóa 2 giai đoạn (2PL) Qui tắc (3) Giao tác 2PL t EOTBOT Phase lock Phase unlock Đơn vị dữ liệu giữ lock của Ti 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 S : li(A) ui(A) không có lockkhông có unlock 101 Kỹ thuật khóa 2 giai đoạn (tt) T1 Lock(A) Read(A) Lock(B) Read(B) B:=B+A Write(B) Unlock(A) Unlock(B) T2 Lock(B) Read(B) Lock(A) Read(A) A:=A+B Write(A) Unlock(A) Unlock(B) Thỏa nghi thức khóa 2 giai đoạn T3 Lock(B) Read(B) B=B-50 Write(B) Unlock(B) Lock(A) Read(A) A=A+50 Write(A) Unlock(A) T4 Lock(A) Read(A) Unlock(A) Lock(B) Read(B) Unlock(B) Pritn(A+B) Không thỏa nghi thức khóa 2 giai đoạn 102 Ví dụ T2T1S 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ờ T2T1 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 103 Ví dụ 104 T2T1 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ờ Bài tập 105 S có khả tuần tự không? Giao tác nào không thỏa 2PL? T1 T2 RL(A) Read(A) UL(A) RL(B) Read(B) UL(B) WL(A) Read(A) A:=A+B Write(A) UL(A) WL(B) Read(B) B:=B+A Write(B) UL(B) S Bài tập 106 S có khả tuần tự hay không? Giao tác nào không thỏa 2PL? T1 T3 RL(A) UL(A) T2 T4 RL(A) WL(B) WL(A) UL(B) RL(B) UL(A) RL(B) RL(A) UL(B) WL(C) UL(A) WL(B) UL(B) UL(B) UL(C) Kỹ thuật khóa đọc ghi Bộ lập lịch có các hành động Khóa đọc (Read lock, Shared lock) RLock(A) hay rl(A) Khóa ghi (Write lock, Exclusive lock) WLock(A) hay wl(A) Giải phóng khóa Unlock(A) hay u(A) Lock(A) Unlock(A) Ti Tj Read(A) Lock(A) Unlock(A) Read(A) 107 Kỹ thuật khóa đọc ghi (tt) Cho 1 đơn vị dữ liệu A bất kỳ WLock(A) Hoặc có 1 khóa ghi duy nhất lên A Hoặc không có khóa ghi nào lên A RLock(A) Có thể có nhiều khóa đọc được thiết lập lên A 108 Kỹ thuật khóa đọc ghi (tt) Giao tác muốn Write(A) Yêu cầu WLock(A) WLock(A) sẽ được chấp thuận nếu A tự do Sẽ không có giao tác nào nhận được WLock(A) hay RLock(A) Giao tác muốn Read(A) Yêu cầu RLock(A) hoặc WLock(A) RLock(A) sẽ được chấp thuận nếu A không đang giữ một WLock nào Không ngăn chặn các thao tác khác cùng xin Rlock(A) Các giao tác không cần phải chờ nhau khi đọc A Sau khi thao tác xong thì giao tác phải giải phóng khóa trên đơn vi dữ liệu A ULock(A) 109 Kỹ thuật khóa đọc ghi (tt) Qui tắc (1) Giao tác đúng đắn (2) Lịch thao tác hợp lệ Ti : rl(A) r(A) u(A) Ti : wl(A) w(A) u(A) S : rli(A) ui(A) không có wlj(A) S : wli(A) ui(A) không có wlj(A) không có rlj(A)110 Bài tập 111 Trong các giao tác trong lịch trên giao tác nào viết đúng nghi thức khoá hai giai đoạn? Kỹ thuật nhãn thời gian (timestamps) Giới thiệu Nhãn thời gian của giao tác Nhãn thời gian của đơn vị dữ liệu Nhãn thời gian toàn phần Nhãn thời gian riêng phần Nhãn thời gian nhiều phiên bản (multiversion) 112 Giới thiệu Nguyên lý cơ bản của lịch khả tuần tự Sắp xếp thứ tự các thao tác khi chúng được gọi thực hiện Kiểm soát các truy xuất tranh chấp trên dữ liệu; phải đảm bảo các truy xuất tôn trọng thứ tự trước sau của giao tác Chọn một thứ tự thực hiện nào đó cho các giao tác bằng cách gán nhãn thời gian (timestamping) Mỗi giao tác T sẽ có 1 nhãn, ký hiệu TS(T) Tại thời điểm giao tác bắt đầu Thứ tự của các nhãn tăng dần Giao tác bắt đầu trễ thì sẽ có nhãn thời gian lớn hơn các giao tác bắt đầu sớm113 Nhãn thời gian của giao tác 114 Nhãn thời gian của đơn vị dữ liệu 115 Nhãn thời gian toàn phần Mỗi giao tác T khi phát sinh sẽ được gán 1 nhãn TS(T) ghi nhận lại thời điểm phát sinh của T. Mỗi đơn vị dữ liệu X cũng có 1 nhãn thời TS(X), nhãn này ghi lại TS(T) của giao tác T đã thao tác read/write thành công sau cùng lên X. Khi đến lượt giao tác T thao tác trên dữ liệu X, so sánh TS(T) và TS(X). 116 Nhãn thời gian toàn phần (tt) Read(T, X) If TS(X) <= TS(T) Read(X); //cho phép đọc X TS(X):= TS(T); Else Abort {T}; //hủy bỏ T //khởi tạo lại TS If TS(X) <= TS(T) Write(X); //cho phép ghi X TS(X):= TS(T); Else Abort {T}; //hủy bỏ T //khởi tạo lại TS Write(T, X) 117 Ví dụ 118 TS(A) <= TS(T1) : T1 đọc được A TS(B) <= TS(T2) : T2 đọc được B TS(A) <= TS(T1) : T1 ghi lên A được TS(B) <= TS(T2) : T2 ghi lên B được TS(B) > TS(T1) : T1 không đọc được B Abort TS(T1)=100 1 2 3 4 5 TS(A)=100 TS(B)=200 TS(A)=100 TS(B)=200 T1 Read(A) T2 TS(T2)=200 A TS(A)=0 B TS(B)=0 Read(B) A=A*2 Write(A) B=B+20 Write(B) Read(B) Khởi tạo lại TS(T1) TS(T2) TS(T1) Lịch khả tuần tự theo thứ tự {T2, T1} 3 Ví dụ TS(T1)=100 TS(A)=100 TS(A)=120 T1 Read(A) T2 TS(T2)=120 A TS(A)=0 Read(A) Write(A) Write(A) TS(A)=120 T1 bị hủy và bắt đầu thực hiện lại với timestamp mới TS(T1)=100 T1 T2 TS(T2)=120 Read(A) Read(A) Read(A) Read(A) A TS(A)=0 TS(A)=100 TS(A)=120 TS(A)=120 T1 bị hủy và bắt đầu thực hiện lại với timestamp mới Không phân biệt tính chất của thao tác là đọc hay viết T1 vẫn bị hủy và làm lại từ đầu với 1 timestamp mới Nhận xét Nhãn thời gian riêng phần Nhãn của đơn vị dữ liệu X được tách ra thành 2 RT(X) - read Ghi nhận TS(T) gần nhất đọc X thành công WT(X) - write Ghi nhận TS(T) gần nhất ghi X thành công 120 Nhãn thời gian riêng phần (tt) Công việc của bộ lập lịch Gán nhãn RT(X), WT(X) và C(X) Kiểm tra thao tác đọc/ghi xuất hiện vào lúc nào Có xãy ra tình huống Đọc quá trễ Ghi quá trễ Đọc dữ liệu rác (dirty read) Qui tắc ghi Thomas 121 Nhãn thời gian riêng phần (tt) Đọc quá trễ T bắt đầu U bắt đầu U ghi X T đọc X ST(T) ST(U) U ghi X trước,T đọc X sau ST(T) <WT(X) T không thể đọc X sau U HủyT 122 Nhãn thời gian riêng phần (tt) Ghi quá trễ T bắt đầu U bắt đầu U đọc X T ghi X ST(T) ST(U) U đọc X trước,T ghi X sau WT(X) < ST(T) < RT(X) U phải đọc được giá trị X được ghi bởiT HủyT 123 Nhãn thời gian riêng phần (tt) 124 Đọc dữ liệu rác T bắt đầu U bắt đầu U đọc XT ghi X T hủy ST(T) ST(U) T ghi X trước, U đọc X sau Thao tác bình thường NhưngT hủy U đọc X sau khiT commit U đọc X sau khiT abort Nhãn thời gian riêng phần (tt) Qui tắc ghi Thomas T bắt đầu U bắt đầu T ghi X U ghi X ST(T) ST(U) U ghi X trước,T ghi X sau ST(T) <WT(X) T ghi X xong thì không làm được gì Không có giao tác nào đọc được giá trị X của T (nếu có cũng bị hủy do đọc quá trễ) Các giao tác đọc sau T và U thì mong muốn đọc giá trị X của U Bỏ qua thao tác ghi củaT 125 Nhãn thời gian riêng phần (tt) T bắt đầu U bắt đầu T ghi X U ghi X T kết thúc U hủy Nhưng U hủy Giá trị của X được ghi bởi U bị mất Cần khôi phục lại giá trị X trước đó VàT đã kết thúc X có thể khôi phục từ thao tác ghi củaT Do qui tắc ghiThomas Thao tác ghi đã được bỏ qua Quá trễ để khôi phục X Qui tắc ghi Thomas 126 Nhãn thời gian riêng phần (tt) Qui tắc ghi Thomas T bắt đầu U bắt đầu T ghi X U ghi X T kết thúc U hủy KhiT muốn ghi ChoT thử ghi và sẽ gỡ bỏ nếuT hủy Sao lưu giá trị cũ của X và nhãn WT(X) trước đó 127 Nhãn thời gian riêng phần (tt) Read(T, X) If WS(X) <= TS(T) Read(X);//cho phép đọc X RT(X):= max(RT(X),TS(T)); Else Rollback{T}; //hủy T và khởi tạo lại TS mới If RT(X) <= TS(T) If WT(X) <= TS(T) Write(X);//cho phép ghi X WT(X):= TS(T); //Else không làm gì cả Else Rollback{T}; //hủy T và khởi tạo lại TS mới Write(T, X) 128 Ví dụ 1 2 3 4 5 T1 Read(A) T2 TS(T2)=200 A RT(A)=0 B RT(B)=0 Read(B) Write(A) Write(B) Read(C) TS(T1)=100 WT(A)=0 WT(B)=0 RT(A)=100 WT(A)=0 RT(B)=200 WT(B)=0 RT(A)=100 WT(A)=100 RT(B)=200 WT(B)=200 C RT(C)=0 WT(C)=0 RT(C)=200 WT(C)=0 Read(C) RT(C)=200 WT(C)=0 Write(C) WT(A) <= TS(T1) T1 đọc được A WT(B) < =TS(T2) T2 đọc được B RT(A) < =TS(T1) T1 ghi lên A đượcWT(A) <= TS(T1) RT(B) <= TS(T2) T2 ghi lên B được WT(B) <= TS(T2) WT(C) < =TS(T2) T2 đọc được C WT(C) < =TS(T1) T1 đọc được C 6 7 RT(C) >TS(T1) T1 không ghi lên C được Abort129 Ví dụ T1 Read(B) T2 TS=150 A RT=0 B RT=0 Read(A) Write(B) Write(A) Write(A) TS=200 WT=0 WT=0 RT=200 WT=0 RT=150 WT=0 RT=175 WT=0 RT=200 WT=200 C RT=0 WT=0 RT=150 WT=200 Write(C) Rollback T3 TS=175 Read(C) Giá trị của A đã sao lưu bởi T1 T3 không bị rollback và không cần ghi A 130 Ví dụ T1 Read(A) T2 TS=200 A RT=0 Read(A) Write(A) Write(A) Read(A) TS=150 WT=0 RT=150 WT=0 RT=200 WT=200 T3 TS=175 Rollback T4 TS=255 Read(A) RT=150 WT=150 RT=200 WT=150 RT=255 WT=200 Nhận xét •Thao tác read3(A) làm cho giao tác T3 bị hủy •T3 đọc giá trị của A sẽ được ghi đè trong tương lai bởi T2 •Giả sử nếu T3 đọc được giá trị của A do T1 ghi thì sẽ không bị hủy 131 Bài tập 132 Dùng kỹ thuật timestamp từng phần để điều khiển truy xuất đồng thời của 4 giao tác trên, với timestamp của các giao tác T1, T2, T3, T4 lần lượt là: a) 300, 310, 320, 330 b) 250, 200, 210, 275 Bài tập 133 134 1) Lịch S có khả tuần tự không? Nếu có thì tương đương với lịch tuần tự nào. 2) Thay Rlock bởi Read, thay Wlock bởi Write, bỏ qua các thao tác Unlock. Dùng kỹ thuật timestamp từng phần để điều khiển việc truy xuất đồng thời của các giao tác biết các timestamp của các giao tác là T1=100, T2=300, T3=200, T4=400, T5=500. Nhãn thời gian nhiều phiên bản Mỗi đơn vị dữ liệu có thể có nhiều phiên bản cho từng giao tác. Mỗi phiên bản của 1 đơn vị dữ liệu X có RT(X) Ghi nhận lại giao tác sau cùng đọc X thành công WT(X) Ghi nhận lại giao tác sau cùng ghi X thành công Khi giao tác T phát ra yêu cầu thao tác lên X Tìm 1 phiên bản thích hợp của X Đảm bảo tính khả tuần tự Một phiên bản mới của X sẽ được tạo khi hành động ghi X thành công 135 Thuật tóan i=“số thứ tự phiên bản sau cùng nhất của A” While WT(Xi) > TS(T) i:=i-1;//lùi lại Read(Xi); RT(Xi):= max(RT(Xi), TS(T)); Read(T, X) i=“số thứ tự phiên bản sau cùng nhất của A” While WT(Xi) > TS(T) i:=i-1;//lùi lại If RT(Xi) > TS(T) Rollback T//Hủy và khởi tạo TS mới Else Tạo phiên bản Ai+1; Write(Xi+1); RT(Xi+1) = 0;//chưa có ai đọc WT(Xi+1) = TS(T); Write(T, X) 136 Ví dụ RT=150 WT=0 RT=0 WT=200 T1 Read(A) T2 TS=200 A0 RT=0 Read(A) Write(A) Write(A) Read(A) TS=150 WT=0 T3 TS=175 T4 TS=255 Read(A) RT=0 WT=150 RT=200 WT=150 RT=200 WT=150 A1 A2 RT=255 WT=200 137 Ví dụ (tt) T1 TS=100 T2 TS=200 Read(A) Write(A) Write(B) Read(B) Write(A) A0 RT=0 WT=0 RT=100 WT=0 RT=0 WT=200 RT=0 WT=0 B1 RT=0 WT=200 RT=100 WT=0 A1 RT=0 WT=100 A2 RT=0 WT=200 138 Nhãn thời gian nhiều phiên bản (tt) Nhận xét Thao tác đọc Giao tác T chỉ đọc giá trị của phiên bản do T hay những giao tác trước T cập nhật T không đọc giá trị của các phiên bản do các giao tác sau T cập nhật Thao tác đọc không bị rollback Thao tác ghi Thực hiện được bằng cách chèn thêm phiên bản mới Không thực hiện được thì rollback Tốn nhiều chi phí tìm kiếm, tốn bộ nhớ Nên giải phóng các phiên bản quá cũ không còn được các giao tác sử dụng 139 Nhận xét Khóa & nhãn thời gian Nếu các giao tác chỉ thực hiện đọc không thôi thì kỹ thuật nhãn thời gian tốt hơn Ít có tình huống các giao tác cố gắng đọc và ghi cùng 1 đơn vị dữ liệu Nhưng kỹ thuật khóa sẽ tốt hơn trong những tình huống xãy ra tranh chấp Kỹ thuật khóa thường hay trì hoãn các giao tác để chờ xin được khóa Dẫn đến deadlock Nếu có các giao tác đọc và ghi cùng 1 đơn vị dữ liệu thì việc rollback là thường xuyên hơn 140
File đính kèm:
- bai_giang_he_quan_tri_co_so_du_lieu_chuong_ii_quan_ly_truy_x.pdf