8/25/2017 Nội dung Các vấn đề truy xuất đồng thời Cách giải vấn đề Chế độ khóa Chương Xử lý truy xuất đồng thời GV: Lê Thị Minh Nguyện Email: nguyenltm@huflit.edu.vn Hệ quản trị Cơ sở liệu Các vấn đề truy xuất đồng thời 1.1 Mất liệu cập nhật (lost updated) 1.1 Mất liệu cập nhật (lost updated) Xét giao tác T1 T2 Read(A) A:=A+10 Write(A) 1.2 Không thể đọc lại (unrepeatable read) 1.3 “Bóng ma” (phantom) Read(A) A:=A+20 Write(A) Giả sử T1 T2 thực đồng thời 1.4 Đọc liệu chưa xác (dirty read) Dữ liệu cập nhật t4 T1 bị bị ghi chồng lên thời điểm t6 A=50 T1 t1 Read(A) t2 A:=A+10 t3 Write(A) t4 t5 t6 A=60 Hệ quản trị Cơ sở liệu Hệ quản trị Cơ sở liệu T2 Read(A) A:=A+20 Write(A) A=70 8/25/2017 1.1 Mất liệu cập nhật (lost updated) (tt) 1.1 Mất liệu cập nhật (lost updated) (tt) Tình trạng xảy hai hay nhiều thao tác giao tác khác yêu cầu truy cập mục liệu Các liệu thao tác trước cập nhật lại bị thao tác sau cập nhật lại làm thay đổi kết mong muốn • Ví dụ: nhà sách 500 sách: Từ lúc T1 nhân viên A yêu cầu mua 400 sách từ khách hàng X Cũng từ T1 nhân viên B yêu cầu mua 300 từ khách hàng Y A B đọc liệu thấy 500 nên đồng ý bán Vào lúc T2 nhân viên A thực cập nhật số sách từ 500 thành 100 Vào lúc T3 nhân viên B cập nhật số sách từ 500 thành 200 • Như thao tác cập nhật A khơng có tác dụng hay liệu A cập nhật bị B cập nhật sau Hệ quản trị Cơ sở liệu • Xét giao tác • Ví dụ: giả sử nhà sách 200 sách T2 Read(A) A:=A+10 Write(A) 1.2 Không thể đọc lại (unrepeatable read) (tt) 1.2 Không thể đọc lại (unrepeatable read) T1 Hệ quản trị Cơ sở liệu Vào lúc T1 nhân viên A bán cho khách 150 cuốn, thực cập nhật sách từ 200 thành 50 (giao dịch chưa hoàn thành chẳng hạn việc giao nhận tiền chưa xong) Sau lúc T2, B nhận yêu cầu mua 100 sách, B đọc liệu chưa hồn tất B từ chối bán 100 sách Nếu vào lúc T3 lý chẳng hạn không đủ tiền khách hàng A không mua 150 sách Giao tác bán hàng A không thực nên quay trạng thái số sách lại 200 Nhưng B từ chối khách hàng Nếu B không đọc liệu từ lúc T1 đến T3 nào? Read(A) Print(A) Read(A) Print(A) • Giả sử T1 T2 thực đồng thời A=50 • T2 tiến hành đọc A hai lần cho hai kết khác t1 T2 Read(A) Read(A) A=50 Print(A) A=50 t6 Read(A) A=60 t7 Print(A) A=60 t2 t3 A:=A+10 t4 t5 Hệ quản trị Cơ sở liệu T1 Write(A) Hệ quản trị Cơ sở liệu 8/25/2017 1.3 “Bóng ma” (phantom) Đọc liệu chưa xác (dirty read) • Xét giao tác T1 T2 xử lý đồng thời • Xét giao tác T1 T2 xử lý đồng thời • A B tài khoản • T1 rút số tiền tài khoản A đưa vào tài khoản B • T2 kiểm tra nhận đủ tiền hay chưa? A=70, B=50 T1 • T2 đọc liệu ghi T1 sau T1 yêu cầu hủy việc ghi T2 t1 Read(A) t2 A:=A-50 t3 Write(A) A=70 T1 t1 Read(A) t2 A:=A+10 t3 Write(A) A=20 t5 t4 A=20 t6 t5 Read(B) B=50 Print(A+B) A+B=70 t6 t7 Read(B) t8 B:=B+50 t9 Write(B) Read(A) t4 Read(A) T2 Print(A) Abort 50 ??? Hệ quản trị Cơ sở liệu Cách giải vấn đề Hệ quản trị Cơ sở liệu 10 Chế độ khóa • Các hệ quản trị CSDL thương mại làm hết rồi!!!!!! • Thực chế Transaction chế khoa • Trước transaction đọc chỉnh sửa liệu, cần bảo vệ tránh ảnh hưởng transaction khác chỉnh sửa liệu 3.1 Các cấp độ khóa 3.2 Các mức lập cho giao tác 3.3 Live lock 3.4 Dead lock Hệ quản trị Cơ sở liệu 11 Hệ quản trị Cơ sở liệu 12 8/25/2017 3.1 Các cấp độ khóa 3.1 Các cấp độ khóa (tt) • Các kiểu lock • Binary Locks • Các mức Locking • Database level • Table level • Có trạng thái: locked (1) or unlocked (0) • Page level • Nếu object bị lock transaction, không transaction sử dụng object • Row level • Field (attribute) level • Nếu object unlocked, transaction lock object để sử dụng Bất kể mức khóa DBMS dùng loại khóa khác nhau: Binary Shared / Exclusive • transaction phải “unlock”object sau hoàn tất Hệ quản trị Cơ sở liệu 13 Ví dụ 14 Hệ quản trị Cơ sở liệu 14 3.1 Các cấp độ khóa (tt) S T1 T2 • Các kiểu lock • Shared Locks Lock(A) Read(A,t) t:=t+100 Write(A,t) Unlock(A) • Một shared lock tồn transaction đồng thời đọc liệu Lock(A) Read(A,s) s:=s*2 Write(A,s) Unlock(A) Lock(B) Read(B,s) s:=s*2 Write(B,s) Unlock(B) • Một shared lock khơng làm đụng độ liệu transaction đồng thời đọc liệu • Một shared lock gán transaction muốn đọc liệu liệu khơng tồn exclusive lock Lock(B) Read(B,t) t:=t+100 Write(B,t) Unlock(B) Hệ quản trị Cơ sở liệu 15 Hệ quản trị Cơ sở liệu 16 8/25/2017 3.1 Các cấp độ khóa (tt) 3.1 Các cấp độ khóa (tt) • Các kiểu lock • Exclusive Locks • Các kiểu lock • Exclusive Locks • Tồn transaction ghi liệu • Tồn transaction ghi liệu • Được sử dụng có khả đụng độ liệu • Được sử dụng có khả đụng độ liệu • Một exclusive lock gán transaction muốn ghi liệu liệu chưa bị lock • Một exclusive lock gán transaction muốn ghi liệu liệu chưa bị lock • Được dùng cho thao tác sửa đổi liệu lệnh INSERT, UPDATE hay DELETE Bảo đảm nhiều lệnh cập nhật không thực tài nguyên lúc • Được dùng cho thao tác sửa đổi liệu lệnh INSERT, UPDATE hay DELETE Bảo đảm nhiều lệnh cập nhật không thực tài nguyên lúc Hệ quản trị Cơ sở liệu 17 Hệ quản trị Cơ sở liệu 3.1 Các cấp độ khóa (tt) 3.2 Các mức lập cho giao tác • Các kiểu lock • Exclusive Locks • Read Uncommitted • Ví dụ: lệnh Update sửa đổi hàng bảng mà lệnh có kết nối (join) với bảng khác cần khóa? • Một khóa shared cho hàng đọc bảng kết nối • Một khóa exclusive cho hàng cập nhật bảng update Hệ quản trị Cơ sở liệu 19 18 • Read Committed • Repeatable Read • Serializable Hệ quản trị Cơ sở liệu 20 8/25/2017 Read Committed Read Uncommitted • Đặc điểm: Đặc điểm: Khơng thiết lập Shared Lock đơn vị liệu cần đọc Do khơng phải chờ đọc liệu (kể liệu bị lock giao tác khác) Vẫn tạo Exclusive Lock đơn vị liệu ghi, Exclusive Lock giữ hết giao tác Ưu điểm: •Tốc độ xử lý nhanh •Khơng cản trở giao tác khác thực việc cập nhật liệu Nhược điểm: Có khả xảy vấn đề xử lý đồng thời : • Dirty Reads • Unrepeatable Reads • Phantoms • Lost Updates Hệ quản trị Cơ sở liệu • Đây mức độ cô lập mặc định SQL Server • Tạo Shared Lock đơn vị liệu đọc, Shared Lock giải phóng sau đọc xong liệu • Tạo Exclusive Lock đơn vị liệu ghi, Exclusive Lock giữ hết giao tác Ưu điểm: • Giải vấn đề Dirty Reads • Shared Lock giải phóng ngay, không cần phải giữ hết giao tác nên không cản trở nhiều đến thao tác cập nhật giao tác khác 21 Repeatable Read Nhược điểm: • Chưa giải vấn đề Unrepeatable Reads, Phantoms,Lost Updates • Phải chờ đơn vị liệu cần đọc giữ khoá ghi (xlock) Hệ quản trị Cơ sở liệu 22 Serializable Đặc điểm: • Tạo Shared Lock đơn vị liệu đọc giữ shared lock đến hết giao tác => Các giao tác khác phải chờ đến giao tác kết thúc muốn cập nhật, thay đổi giá trị đơn vị liệu • Tạo Exclusive Lock đơn vị liệu ghi, Exclusive Lock giữ hết giao tác Nhược điểm: •Ưu điểm: •Chưa giải vấn đề Phantoms Giải vấn đề Dirty Reads •Phải chờ đơn vị liệu cần đọc Unrepeatable Reads giữ khoá ghi (xlock) •Shared lock giữ đến hết giao tác ==> cản • Đặc điểm: • Tạo Shared Lock đơn vị liệu đọc giữ shared lock đến hết giao tác => Các giao tác khác phải chờ đến giao tác kết thúc muốn cập nhật, thay đổi giá trị đơn vị liệu • Khơng cho phép Insert dịng liệu thỏa mãn điều kiện • thiết lập Shared Lock (sử dụng Key Range Lock) ==> Serializable = Repeatable Read + Giải Phantoms • Tạo Exclusive Lock đơn vị liệu ghi, Exclusive Lock giữ hết giao tác trở việc cập nhật liệu giao tác khác Hệ quản trị Cơ sở liệu 23 Hệ quản trị Cơ sở liệu 24 8/25/2017 Serializable (tt) Bảng tóm tắt Ưu điểm: Giải thêm vấn đề Phantoms Mức Isolation Dirty read Nonrepeatable read Phantom read Nhược điểm: Read Uncommitted Yes Yes Yes SET TRANSACTION ISOLATION LEVEL READ COMMITTED • Phải chờ đơn vị liệu cần đọc giữ khố ghi (xlock) • Cản trở nhiều đến việc cập nhật liệu giao tác khác Read Committed No Yes Yes SET TRANSACTION ISOLATION LEVEL READ COMMITTED Repeatable read No No Yes SET TRANSACTION ISOLATION LEVEL REPEATABLE READ Serializable No No No SET TRANSACTION ISOLATION LEVEL SERIALIZABLE Hệ quản trị Cơ sở liệu 25 3.3 Live lock Hệ quản trị Cơ sở liệu 26 Hệ quản trị Cơ sở liệu 28 3.3 Live lock (tt) • Khóa sống (live lock): khóa khơng giải phóng làm cho giao tác phải chờ vơ tận • T1 u cầu khóa B, T2 u cầu khóa B • T1 u cầu trước nên B T1 khóa, T1 khơng giải phóng B nên T2 khơng thể khóa B mà phải chờ vơ tận Hệ quản trị Cơ sở liệu 27 8/25/2017 3.4 Dead lock 3.4 Dead lock (tt) • Khóa chết (dead lock): trường hợp hay nhiều giao tác chờ đợi lẫn Giả sử T1 khóa A chờ B giải phóng để khóa; T2 khóa B chờ A giải phóng để khóa A Các yêu cầu khóa A,B dẫn đến chờ trở nên vơ hạn • Kỹ thuật ngăn ngừa deadlock • Ép người viết chương trình viết khơng deadLock xảy ngăn ngừa deadlock • HQT theo dõi có deadlock báo cho admin biết để xử lý Hệ quản trị Cơ sở liệu 29 3.4 Dead lock (tt) • Giải Deadlock • Hủy tất cách giải tốt • Hủy giao tác gây deadlock Giao tác gây ra? • Dùng thời gian chờ • Dùng đồ thị chờ 30 3.4 Dead lock (tt) • Đồ thị chờ • Ngăn ngừa Deadlock • Sắp xếp đơn vị liệu theo thứ tự cố định giao tác yêu cầu lock chúng theo thứ tự • Các giao tác chờ lần deadlock Các transaction chờ theo chiều định ngăn ngừa deadlock • 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 deadlock • • • • Cho S lịch giao tác giao tác T1, T2, , Tn Đồ thị có đỉnh giao tác Cung có hướng Ti Tj 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 31 32 8/25/2017 Ví dụ Ví dụ T1 L(A); R(A) T2 T3 T4 L(C); R(C) L(B); R(B) L(D); R(D) L(A) Chờ L(B) L(C) Chờ Chờ T1 T2 T3 L(A) Chờ T1 L(A); R(A) T3 T4 L(C); R(C) L(B); R(B) L(D); R(D) L(A) L(C) L(A) L(B) T1 T4 T2 T2 T3 33 T4 34 Giải deadlock SQL server Hệ quản trị Cơ sở liệu 35 Hệ quản trị Cơ sở liệu 36