TRƯỜNG ĐẠI HỌC CẦN THƠ KHOA CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG BỘ MÔN CÔNG NGHỆ THÔNG TIN QUẢN TRỊ DỮ LIỆU - CT467 Chương 3: GIAO DỊCH (Transaction) Biên soạn: Ths. Nguyễn Thị Kim Yến Ntkyen@ctu.vn MỤC TIÊU CỦA CHƯƠNG 3 • Giới thiệu các nguyên tắc xử lý giao dịch trong hệ quản trị CSDL bao gồm: – Các khái niệm có liên quan đến xử lý giao dịch – Điều khiển sự cạnh tranh giữa các giao dịch – Và một số tính chất của các lịch trình 1 NỘI DUNG 1 Khái niệm giao dịch 2 Các trạng thái của giao dịch 3 Cạnh tranh giao dịch 4 Lịch trình giao dịch 5 Tính khả tuần tự 6 Tính phục hồi 2 1. Khái niệm • Giao dịch (GD): một đơn vị thực hiện chương trình truy xuất và có thể cập nhật nhiều hạng mục dữ liệu. • Là 1 tập hợp có thứ tự các thao tác truy xuất dữ liệu trên CSDL thành 1 đơn vị công việc logic.
- Chuyển CSDL từ trạng thái nhất quán này sang trạng thái nhất quán khác. Khái niệm (tt) • Mỗi GD được xử lý một cách nhất quán và tin cậy mà không phụ thuộc vào các giao dịch khác. • Ví dụ: Chuyển tiền từ tài khoản A sang tài khoản B là một giao dịch • Kiểm tra tiền trong tài khoản A (có X không?) • A=A–X • B=B+X 4 4 tính chất của giao dịch A nguyên tử C nhất quán I cô lập D bền vững 5 v Tính nguyên tử TK A Chuyển khoản TK B Trước: $100 Trước: $200 Trừ: $20 Nhận: $20 Còn: $80 Tổng: $200 Trừ tiền thành công Không là GD Nhận tiền thất bại nguyên tử TK A Chuyển khoản TK B Trước: $100 Trước: $200 Trừ: $20 Nhận: $20 Còn: $80 Tổng: $220 Trừ tiền thành công GD là Nhận tiền thành công nguyên tử 6 v Tính nhất quán TK A Trước: $300 Chuyển B: $50 Còn 1: $250 Chuyển C: $20 Giá trị được Còn 2: $230 Giá trị được đọc bởi đọc bởi B=$300 T: giao dịch C=$250 trước T B C trước T TK B TK C Trước: $100 Trước: $50 Nhận: $50 Nhận: $20 Tổng: $150 Tổng: $70 7 v Tính cô lập Giá trị được TK A B đọc trước Trước: $100 TK B T1 là $100 Chuyển B: $20 Trước: $50 Còn 1: $80 T1 Nhận bởi A: $20 Chuyển C: $20 Tổng: $70 Còn 2: $60 Giá trị được C đọc trước T2 T2 là $80 TK C Trước: $70 Nhận bởi A: $20 Tổng: $90 8 v Tính bền vững Chuyển khoản Thành công TK A TK B Trước: $100 Trước: $200 Trừ: $20 Nhận: $20 Còn: $80 Tổng: $220 Hệ thống xãy ra sự cố 9 Cấu trúc của Transaction • BEGIN TRANSACTION: Bắt đầu một transaction • SAVE TRANSACTION: Đánh dấu vị trí trong transaction • ROLLBACK TRANSACTION: Quay lui lại đầu transaction hoặc điểm đánh dấu trước đó trong transaction • COMMIT TRANSACTION: Đánh dấu điểm kết thúc của một transaction (thực hiện thành công) • ROLLBACK WORK: Quay lui lại đầu transaction. • COMMIT WORK: Đánh dấu kết thúc transaction.
10 Các thao tác của giao dịch vCác truy xuất trong CSDL được thực hiện bởi 2 hoạt động: • READ(X): đọc 1 hạng mục X từ CSDL vào vùng nhớ GD • WRITE(X): ghi hạng mục X từ vùng nhớ GD vào CSDL Read (X, t) Write (X, t) 11 2. Các trạng thái của giao dịch • Hoạt động (Active): GD sẽ duy trì trạng thái này trong khi đang thực hiện • Cam kết một phần (Partially Committed): sau khi thao tác cuối cùng trong GD được thực hiện • Thất bại (Failed): Sau khi phát hiện rằng sự thực hiện không thể tiếp tục được nữa • Bỏ dở (Aborted): Sau khi rollback và CSDL đã phục hồi lại trạng thái của nó trước khi khởi động GD • Cam kết (Committed): GD hoàn tất thành công 12 3. Các trạng thái của giao dịch (tt) Data is in Local Data Flushed to Buffer Disk rollback All changes being Khởi động lại GD Rollback Giết GD 13 Thực thi tính nguyên tử và bền vững Bản sao bóng (shadow copy) Tất cả các thay đổi của các GD được cập nhật trong bản sao bóng của CSDL Khi tất cả giao dịch hoàn tất, con trỏ DB thực hiện trỏ đến CSDL bóng bản sao mới của DB. Bản sao cũ của DB sẽ bị xóa 14 Thực thi tính nguyên tử và bền vững (tt) v Yêu cầu: • Sự cập nhật DB_pointer là nguyên tử (hoặc tất cả các byte của nó được viết hoặc không byte nào được viết) • Đảm bảo bởi việc thực thi bản sao bóng của thành phần quản trị phục hồi (sao lưu toàn bộ CSDL) • Không cho phép GD thực hiện đồng thời với các GD khác Cực kỳ thiếu hiệu quả trong ngữ cảnh CSDL lớn 15 3.
Cạnh tranh giao dịch • Khi 2 GD thực hiện đồng thời khó khăn trong việc đảm bảo tính nhất quán của dữ liệu. GD1 GD2 Nhận xét Read Read Không có cạnh tranh Read Write Xảy ra cạnh tranh Write Read Xảy ra cạnh tranh Chỉ cho phép có đúng 1 GD được ghi Write Write trên đơn vị dữ liệu tại một thời điểm 16 3. Cạnh tranh giao dịch (tt) • Để giải quyết vấn đề nêu trên, hệ QTCSDL sử dụng cơ chế khóa (locking) quyết định GD nào được thực hiện trước và GD nào phải chờ. Transaction 1 nếu thời gian chờ khoá được giải phóng LOCK kéo dài Transaction 2 17 4.
Lịch trình (Schedule) giao dịch • Lịch trình GD: một dãy (có thứ tự) các thao tác của một tập các GD mà trong đó thứ tự của các thao tác trong mỗi GD được bảo toàn. – Lịch trình tuần tự: các thao tác được thực hiện liên tiếp tiếp nhau, không có thao tác GD khác xen vào (n!) – Lịch trình cạnh tranh: là lịch trình trong đó các GD thực hiện cạnh tranh/đồng thời với nhau (> n!) 18 4. Lịch trình giao dịch (tt) • Giả sử T1 và T2 là hai GD chuyển khoản – T1: chuyển 50$ từ tài khoản A sang tài khoản B – T2: chuyển 10% số dư từ TK A sang TK B T1 T2 R(A) Giả sử giá trị hiện tại của: R(A) A = A - 50 temp = A*0.1 A là 1000$ và B là 2000$ W(A) A = A - temp R(B) W(A) B = B + 50 R(B) W(B) B = B + temp W(B) 19 Tính nhất v Lịch trình tuần tự quán CSDL T1 T2 A B T1 T2 A B R(A) R(A) A = A - 50 temp = A*0.1 A = A - temp A = A - temp W(A) 900 W(A) 855 R(B) R(B) W(A) 950 B = B + 50 R(B) W(B) 2050 B = B + 50 R(B) W(B) 2050 B = B + temp B = B + temp W(B) 2145 W(B) 2100 Schedule 3 3000 Schedule 4 3050 Lịch trình khả tuần tự (KQ tương đương 1 LT tuần tự) Lịch trình không khả tuần tự21 v Tính khả tuần tự (Serializability) • Một lịch trình có tính khả tuần tự là một lịch trình tương đương với một lịch trình tuần tự nào đó • Kết quả tương đương: phát sinh cùng trạng thái cuối của CSDL • Tuy nhiên, KQ tương đương là chưa đủ để thể hiện sự tương đương của 2 lịch trình 22 v Tính khả tuần tự (tt) • Chỉ quan tâm thao tác Read và Write trên các dữ liệu • Giữa Read(X) và Write(X) sẽ có 1 dãy thao tác tùy ý trên bản sao của hạng mục dữ liệu X trong bộ nhớ đệm. T1 T2 R(A) W(A) Lịch trình chỉ bao gồm các chỉ thị R(A) W(A) Read và Write được gọi là lịch R(B) trình viết dưới dạng thỏa thuận W(B) R(B) W(B) Schedule 3 23 Ø Biểu diễn lịch trình • S1: R1(A) W1(A) R2(A) W2(A) R1(B) W1(B) R2(B) W2(B) T1 T2 Read(A) Write(A) Read(A) Write(A) Read(B) Write(B) Read(B) Write(B) 24 LỊCH TRÌNH TUẦN TỰ LỊCH TRÌNH KHẢ TUẦN TỰ 25 Ø Kiểm tra tính khả tuần tự Khả tuần tự xung đột (conflict serializable) • Dựa trên ý tưởng hoán vị các chỉ thị không xung đột chuyển 1 lịch trình đồng thời S về 1 lịch trình tuần tự S’.
Nếu có 1 cách biến đổi như vậy thì S là 1 LT KTT XĐ Khả tuần tự view (View serializable) • Dựa trên ý tưởng lịch đồng thời S và lịch tuần tự S’ đọc và ghi những giá trị dữ liệu giống nhau. Nếu có 1 lịch trình S’ như vậy thì S là 1 LT KTT View 26 v Tính khả tuần tự xung đột • Chỉ thị xung đột (conflict instructions): việc thay đổi thứ tự thực thi chỉ thị ảnh hưởng đến kết quả của LT. • Tương đương xung đột (conflict equivalence): 2 lịch trình S cà S’ gọi là tương đương xung đột với nhau nếu như chúng ta có thể biến đổi S về S’ hoặc từ S’ về S bằng cách đảo chỗ các chỉ thị không xung đột Hai LT tương đương xung đột sẽ cho kết quả giống nhau (cùng trạng thái cuối) 27 Chỉ thị xung đột Ý tưởng: Xét 2 chỉ thị liên tiếp nhau của 2 giao dịch khác nhau trong 1 lịch trình, khi 2 chỉ thị thực hiện đảo thứ tự: Không thay đổi kết quả Thay đổi kết quả 2 chỉ thị không xung đột 2 chỉ thị xung đột 28 Tương đương xung đột T1 T2 T1 T2 T1 T2 1 R(A) R(A) R(A) 2 W(A) W(A) R(A) 3 R(B) R(A) W(A) 4 W(B) W(A) R(B) 5 R(A) R(B) W(A) 6 W(A) W(B) R(B) 7 R(B) R(B) W(B) 8 W(B) W(B) W(B) Schedule 1 Schedule 3 Schedule 4 (dạng thỏa thuận) (dạng thỏa thuận) (dạng thỏa thuận) Tương đương XĐ Không tương đương XĐ 29 Ø Khả tuần tự xung đột • Một lịch trình S được gọi là khả tuần tự xung đột (conflict serializable) nếu như S tương đương xung đột với 1 lịch trình tuần tự S’. • Khi đó ta có thể thay đổi thứ tự các chỉ thị không xung đột trong S cho đến khi ta được một lịch trình tuần tự S’ tương đương xung đột S.
LT khả tuần tự xung đột là 1 LT nhất quán 30 Ø Khả tuần tự xung đột (tt) • 2 chỉ thị trong 1 lịch trình gọi là xung đột khi nó thỏa 3 điều kiện sau: – 1. Thuộc về 2 giao dịch khác nhau – 2. Thực hiện trên cùng dữ liệu X – 3.