Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 25 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
25
Dung lượng
1,97 MB
Nội dung
9/10/2019 Chương Giao Tác Nội dung Giới thiệu Giao tác Điều khiển đồng thời www.themegallery.com 9/10/2019 Giới thiệu Đặt hàng Website bàn hàng ĐH ko có chi tiết Giải ??? Đơn Hàng Chi tiết_2 ĐH Chi tiết_1 ĐH CSDL sai Cập nhật SL www.themegallery.com Nội dung Giới thiệu Giao tác Điều khiển đồng thời www.themegallery.com 9/10/2019 Định nghĩa Giao tác Đơn Hàng Chi tiết_2 ĐH Chi tiết_1 ĐH Cập nhật SL Giao tác chuỗi hành động tương tác CSDL Giao tác phải đảm bảo tính chất ACID www.themegallery.com Tính ACID Mọi thao tác phải thực hiện, bị hủy Atomicity (nguyên tố) Durability (bền vững) Khi giao tác thực thành cơng thay đổi phải lưu bền vững CSDL Tất liệu phải trạng thái quán sau giao tác kết thúc Consistency (nhất quán) Isolation (cô lập) Một giao tác thực đồng thời với giao tác khác khơng bị ảnh hưởng giao tác khác www.themegallery.com 9/10/2019 Khai báo giao tác Begin Tran Bắt đầu giao tác Giao tác INSERT Đơn hàng Đơn Hàng INSERT Chi tiết đơn hàng Chi tiết_2 ĐH INSERT Chi tiết đơn hàng Chi tiết_1 ĐH Update Cập nhật số sản phẩm Cập nhật SL End Tran Kết thúc giao tác www.themegallery.com Database trước giao tác SELECT SELECT INSERT UPDATE DELETE INSERT UPDATE Lỗi phần mềm Database trước giao tác ROLLBACK Database trước giao tác ROLLBACK GIAO TÁC Tình giao tác SELECT INSERT Lỗi phần cứng Database sau giao tác www.themegallery.com 9/10/2019 Ví dụ Database trước giao tác Begin Tran Bắt đầu giao tác INSERT Đơn hàng INSERT Chi tiết đơn hàng INSERT Chi tiết đơn hàng Update Cập nhật số sản phẩm End Tran Kết thúc giao tác Database sau giao tác www.themegallery.com Cú pháp Create proc TenProc As Begin Bắt đầu giao tác Begin tran Kết thúc giao tác hủy /*giao tác bị lỗi*/ giao tác, đưa CSDL trạng thái ban đầu rollback tran /*giao tác thành công*/ Kết thúc giao tác thành commit tran công giao tác lưu bền vững xuống CSDL End www.themegallery.com 9/10/2019 Ví dụ Create proc DatHang As Begin Begin tran Insert into DonHang Insert into CT_DonHang Update SanPham commit tran End www.themegallery.com Nội dung Giới thiệu Giao tác Điều khiển đồng thời www.themegallery.com 9/10/2019 Bối cảnh Website bàn hàng www.themegallery.com Bối cảnh Database trước giao tác Đọc DS SP Đọc DS SP Thêm SP vào giỏ Thêm SP vào giỏ Thêm PMH Thêm PMH Thêm CT PMH Thêm CT PMH Cập nhật số SP Cập nhật số SP Database sau giao tác www.themegallery.com 9/10/2019 Bối cảnh Mơ hình ứng dụng đa người dùng Một CSDL lưu Server nhiều clients đồng thời truy cập thao tác CSDL Giao tác Ti client X thao tác CSDL, giao tác Tj client Y thực truy xuất thay đổi CSDL Các Ti Tj xung đột, tranh chấp lẫn www.themegallery.com Giao tác lồng STT T1 Begin tran read (A) … n read (A) T2 Begin tran write (A) Commit tran n+1 Commit tran www.themegallery.com 9/10/2019 Giao tác lồng Tham số @@trancount cho biết số transaction thực thi Khi khai báo transaction tường minh, phải rollback commit tường minh để: Giải phóng tài nguyên transaction chiếm giữ Tránh cản trở việc thực transaction khác www.themegallery.com Vấn đề truy xuất đồng thời Dirty read Unrepeatable read Phantom Lost update Đọc liệu rác Không thể đọc lại liệu Bóng ma Mất liệu cập nhật www.themegallery.com 9/10/2019 Dirty read STT T1 Begin tran write (A) //Insert | Update T2 Begin tran read (A) If (Lỗi) Rollback tran Commit tran Commit tran T2 đọc liệu T1 ghi (nhưng bị lỗi sau rollback – liệu rác) www.themegallery.com Unrepeatable read STT T1 Begin tran Read(A) T2 Begin tran Write(A) Read(A) Commit tran Commit tran T1 đọc liệu giá trị A khác lần đọc www.themegallery.com 10 9/10/2019 Phantom STT T1 Begin tran Read(A) T2 Begin tran write(B) //Insert | Update | Delete Read(A, B) Commit tran Commit tran T1 đọc tập liệu lần khác www.themegallery.com Lost update STT T1 Begin tran Read(A) T2 Begin tran Read(A) Write(A’) Write(A’’) Commit tran Commit tran Dữ liệu ghi T2 bị ghi đè T1 www.themegallery.com 11 9/10/2019 Lỗi giao tác Không có quyền truy cập đối tượng (table, stored procedure,…) Deadlock www.themegallery.com Lỗi giao tác SQL Server trả giá trị lỗi biến toàn cục @@error @@error= 0: không xảy lỗi @@error 0: xảy lỗi với mã lỗi @@error Giao tác tự động rollback gặp lỗi phát sinh trình thực câu lệnh thành phần giao tác Vì cần kiểm tra giá trị biến @@error sau câu lệnh thành phần giao tác cần xử lý lỗi (nếu có): yêu cầu giao tác rollback cách tường minh lệnh rollback transaction www.themegallery.com 12 9/10/2019 Lỗi giao tác Create proc sp_ThemDG @ Ten… as buoc : xác định mã độc giả declare @madg set @madg = begin transaction while exists (select * from DocGia where ma_docgia = @madg) set @madg = @madg +1 if ( @@error 0 ) begin www.themegallery.com rollback tran return end buoc : insert vao bang docgia insert into DocGia values(…) if ( @@error 0 ) begin rollback tran return end … commit transaction Xử lý tranh chấp Cơ chế xử lí tranh chấp đồng thời SQL Server Kỹ thuật khóa : giao tác muốn đọc/ghi đơn vị liệu phải phát yêu cầu xin khóa đơn vị liệu Mức cô lập : thiết lập giao tác quy định việc xin khóa/giữ khóa thao tác đọc/ghi lên đơn vị liệu Khóa trực tiếp câu lệnh www.themegallery.com 13 9/10/2019 Kỹ thuật khóa Khơng đặt khóa (Nolock) Khóa chia sẻ (shared lock) : Cịn gọi khóa đọc (read lock) Gọi tắt : Khóa S Khi đọc đơn vị dự liệu SQL tự động thiết lập shared lock đơn vị liệu Shared lock thiết lập trang, bảng, hay dòng liệu Shared Lock thường giải phóng sau sử dụng xong liệu đọc, trừ có yêu cầu giữ Shared Lock hết giao tác www.themegallery.com Kỹ thuật khóa Khóa cập nhật (update lock) Còn gọi Intend to write lock Gọi tắt: Khóa U Dùng đọc liệu với dự định ghi trở lại sau đọc đơn vị liệu Khóa độc quyền (exclusive lock) : Cịn gọi khóa ghi (write lock) Gọi tắt : Khóa X Khi thực thao tác ghi (Insert, Update, Delete) HQT tự động thiết lập khóa X đơn vị liệu Khóa X giữ đến hết giao tác www.themegallery.com 14 9/10/2019 Bảng tương thích khóa Shared lock Shared lock Update lock Exclusive lock Update lock Exclusive lock Cho phép (tương thích) Khơng cho phép (khơng tương thích) www.themegallery.com Kỹ thuật khóa Giáo tác T1 Ghi đơn vị liệu A Xin khóa X A Muốn ghi đơn vị liệu B Muốn xin khóa X B??? Giáo tác T2 Ghi đơn vị liệu B Xin khóa X B Muốn ghi đơn vị liệu A Muốn xin khóa X A??? Phải chờ www.themegallery.com 15 9/10/2019 Mức cô lập Read Uncommitted Đọc: Khơng phát S đọc khơng phải chờ đọc liệu (kể liệu bị lock) Giải quyết: Không giải vấn đề xử lý đồng thời Read Committed Là mức mặc định SQL Đọc: Phát S đọc, giải phóng S sau đọc Giải quyết: Chỉ giải Dirty Read www.themegallery.com Mức cô lập Repeatable Read Đọc: Phát S đọc giữ hết giao tác Giải quyết: Giải Dirty Read Unrepeatable Read Vẫn cho phép insert dòng liệu thỏa điều kiện thiết lập S, chưa giải phantom Serializable Giống Repeatable Read, không cho phép insert dòng liệu thoả điều kiện thiết lập S Giải Dirty Read, Unrepeatable Read Phantom www.themegallery.com 16 9/10/2019 Mức cô lập Read Uncommitted Read Committed: dirty read Repeatable Read: dirty read unrepeatable read Serializable: dirty read, unrepeatable read phantom Mức lập có tác dụng toàn giao tác đến gặp mức lập khác Giải lost update? www.themegallery.com Khóa câu lệnh Cấp độ khóa loại khóa khác gắn vào table câu lệnh from thao tác select Ngoài câu lệnh select, cấp độ khóa cịn gắn vào câu lệnh cập nhật, nhiên ta quan tâm câu select www.themegallery.com 17 9/10/2019 Các cấp độ khóa STT Khóa Ý nghĩa ReadUncommitted Khơng thiết lập shared lock đọc / Nolock (tương tự mức cô lập Read Uncommitted) ReadCommitted -Đây chế độ mặc định (tương tự readcommitted) -Chỉ đọc liệu commit -Thiết lập shared lock đơn vị liệu đọc mở cock đọc xong RepeatableRead Thiết lập shared lock đọc giữ shared lock đến hết giao tác www.themegallery.com Các cấp độ khóa STT Khóa Serializable / Holdlock Updlock XLock Readpast Ý nghĩa -Thiết lập shared lock đọc, giữ lock đến hết giao tác -Khơng cho insert dịng thỏa điều kiện thiết lập khóa -Dùng updatelock thay cho shared lock -Chỉ sử dụng câu select -Uplock giữ đến hết giao tác Chỉ định dùng khóa độc quyền -Chỉ khóa dịng liệu thao tác -Chỉ dùng với mức cô lập READ COMMITTED REPEATABLE READ www.themegallery.com 18 9/10/2019 Các cấp độ khóa STT Khóa RowLock TabLock 10 TabLockX Ý nghĩa Chỉ đặt khóa dịng cần thao tác -Khóa tồn bảng thao tác -Các thao tác (Insert / Update / Delete) thực bảng Xlock + TabLock 1, 2, 3, 5, 6, có ý nghĩa dùng câu select 1, 2, 3, 5, 6, kết hợp với (chỉ định phạm vi khóa đến hết giao tác) 8, (chỉ định đơn vị liệu cần khóa: row hay tab) www.themegallery.com Thiết lập cấp độ khóa Select … From {Tab1 Alias1 with (Lock_mode [,…n]} [,…n]) Where … Ví dụ : Select SV.HoVaTen, K.TenKhoa From SinhVien SV with (ReadCommitted), Khoa K with (Updlock) Where SV.Khoa = K.Ma www.themegallery.com 19 9/10/2019 Conversion deadlock Conversion deadlock www.themegallery.com Conversion deadlock Transaction Select (A) Transaction Select (A) Insert/ Update/Delete (A) Insert/ Update/Delete (A) Commit Commit www.themegallery.com 20 9/10/2019 Cycle deadlock Cycle deadlock www.themegallery.com Cycle deadlock Transaction Insert/ Update/Delete (A) Transaction Insert/ Update/Delete (B) Insert/ Update/Delete (B) Insert/ Update/Delete (A) Commit Commit www.themegallery.com 21 9/10/2019 Deadlock Khi dead lock xảy SQL Server chọn transaction gây dead lock để hủy bỏ, transaction cịn lại tiếp tục thực hoàn tất Transaction bị chọn hủy transaction mà SQL ước tính chi phí cho phần việc làm transaction cịn lại www.themegallery.com Bài tập STT T1 Begin tran Begin tran SELECT * FROM SACH T2 INSERT SACH (MaSach) Values (‘S003’) SET @Masach = (SELECT Top MaSach FROM SACH ORDER BY MaSach DESC) Rollback … Commit www.themegallery.com 22 9/10/2019 Bài tập STT T1 Begin tran SELECT * FROM SACH T2 Begin tran INSERT SACH (MaSach) Values (‘S003’) SET @Msach = (SELECT Top MaSach FROM SACH ORDER BY MaSach DESC) Commit … Commit www.themegallery.com Bài tập STT T1 Begin tran Begin tran SELECT * FROM SACH T2 UPDATE SACH Set TenSach = ‘ABC’ WHERE MaSach = ‘S003’ SELECT * FROM SACH Commit … Commit www.themegallery.com 23 9/10/2019 Bài tập STT T1 T2 Begin tran Begin tran SELECT * FROM PHIEUDATHANG SELECT * FROM PHIEUDATHANG INSERT PHIEUDATHANG (MaPD, MaKH) VALUES (‘PD004’,’KH003’) UPDATE PHIEUDATHANG SET MaKH = ‘KH002’ WHERE MaPD = ‘PD004’ Commit Commit www.themegallery.com Bài tập STT T1 Begin tran SELECT * FROM PHIEUDATHANG WHERE MaKH = ‘KH002’ INSERT PHIEUDATHANG (MaPD, MaKH) VALUES (‘PD004’,’KH002’) SELECT * FROM PHIEUDATHANG INSERT PHIEUDATHANG (MaPD, MaKH) VALUES (‘PD005’,’KH002’) T2 Begin tran Commit Commit www.themegallery.com 24 9/10/2019 Bài tập STT T1 Begin tran T2 Begin tran INSERT PHIEUDATHANG (MaPD, MaKH) VALUES (‘PD005’,’KH002’) SELECT * FROM PHIEUDATHANG WHERE MaKH = ‘KH002’ SELECT * FROM PHIEUDATHANG WHERE MaKH = ‘KH002’ UPDATE PHIEUDATHANG SET MaKH = ‘KH003’ WHERE MaPD = ‘PD005’ SELECT * FROM PHIEUDATHANG WHERE MaKH = ‘KH002’ Commit www.themegallery.com Commit 25