06 2 giao tac va khoa
TRANSCRIPT
Trường Đại học Sư phạm thành phố Hồ Chí Minh
Khoa Công ngh� thông tin
GIAO TÁC (transaction) và KHÓA CHỐT (lock) trên SQL Server
Ts. Nguyễn An Tế
Nguyễn Tiến Dũng
Nguyễn Thúy Ngọc
CÁC HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Mục tiêu
● Hiểu được ý nghĩa và biết cách sử dụng giao tác trong
SQL Server
Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) 2[HQTCSDL-Bài 6: Giao tác]
Tài liệu tham khảo
● MCTS 70-431: Implementing and Maintaining Microsoft
SQL Server 2005
● Robert Vieira, Beginning SQL Server 2005 Programming,
Wiley Publishing, 2006
Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) 3[HQTCSDL-Bài 6: Giao tác]
Nội dung
1. Giao tác
1.1 Giới thiệu
1.2 Phân loại
1.3 Các cấp độ cô lập (Isolation level)
2. Khóa chốt
2.1 Giới thiệu
2.2 Theo dõi hoạt động khóa chốt
[HQTCSDL-Bài 6: Giao tác]Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) 4
1.1 Giới thiệu
[HQTCSDL-Bài 6: Giao tác]Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) 5
Hoạt động ghi sổ giao tác
Các trang dữ liệu được đọc (nếu chưa có trên Buffer Cache). Dữ liệu thay đổi trên Buffer Cache
Các trang dữ liệu được đọc (nếu chưa có trên Buffer Cache). Dữ liệu thay đổi trên Buffer Cache
22
Các lệnh được ghi vào log fileCác lệnh được ghi vào log file33
Khi checkpoint xảy ra thì các giao tác đã hoàn tất sẽ được ghi vào CSDL
Khi checkpoint xảy ra thì các giao tác đã hoàn tất sẽ được ghi vào CSDL
44
Gởi lệnh cập nhật DLGởi lệnh cập nhật DL11
Disk
Disk
BufferCache
1.1 Giới thiệu
[HQTCSDL-Bài 6: Giao tác]Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) 6
Hoạt động phục hồi giao tácPhục hồi giao tác Hành động
None
Checkpoint
cuối cùngHệ thống gặp lỗi
Roll forward
Roll back
Roll forward
Roll back
11
22
33
44
55
Nội dung
1. Giao tác
1.1 Giới thiệu
1.2 Phân loại
1.3 Các cấp độ cô lập (Isolation level)
2. Khóa chốt
2.1 Giới thiệu
2.2 Theo dõi hoạt động khóa chốt
[HQTCSDL-Bài 6: Giao tác]Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) 7
1.2 Phân loại
● Giao tác tự động commit (Autocommit Transation)
● Giao tác tường minh (Explicit Transaction)
● Giao tác không tường minh (Implicit Transaction)
[HQTCSDL-Bài 6: Giao tác]Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) 8
Autocommit Transaction
● Chế độ mặc định trong SQL Server
● Khi kết thúc thực hiện lệnh, nếu thành công thì tự
động COMMIT, nếu bị lỗi thì tự động ROLLBACK
● Khi thực hiện một khối lệnh nếu gặp lỗi biên dịch thì
khối lệnh không được thực hiện
[HQTCSDL-Bài 6: Giao tác]Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) 9
Minh họa Autocommit Transaction
● Cho thực hiện lệnh cập nhật dữ liệu
● Trong thời gian thực hiện lệnh cập nhật thì Server bị
lỗi
● Lệnh cập nhật sẽ tự động kết thúc với ROLLBACK
[HQTCSDL-Bài 6: Giao tác]Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) 10
Explicit Transaction
● Bắt đầu giao tác: BEGIN TRANSACTION
● Kết thúc giao tác:
[HQTCSDL-Bài 6: Giao tác]Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) 11
oNếu kết thúc thành công: COMMIT TRANSACTION
oNếu kết thúc bị lỗi: ROLLBACK TRANSACTION
Minh họa Explicit Transaction
● Khai báo tường minh các giao tác
● Các giao tác lồng nhau
● Lưu các save point trong giao tác
[HQTCSDL-Bài 6: Giao tác]Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) 12
Implicit Transaction
● Bật sang chế độ giao tác không tường minh
● Một giao tác không tường minh sẽ tự động bắt đầu
[HQTCSDL-Bài 6: Giao tác]Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) 13
SET IMPLICIT_TRANSACTIONS ONSET IMPLICIT_TRANSACTIONS ON
� ALTER DATABASE
� CREATE
� DELETE
� DROP
� FETCH
� GRANT
� INSERT
� OPEN
� REVOKE
� SELECT
� TRUNCATE TABLE
� UPDATE
● Giao tác phải kết thúc bằng COMMIT/ROLLBACK TRAN
Nội dung
1. Giao tác
1.1 Giới thiệu
1.2 Phân loại
1.3 Các cấp độ cô lập (Isolation level)
2. Khóa chốt
2.1 Giới thiệu
2.2 Theo dõi hoạt động khóa chốt
[HQTCSDL-Bài 6: Giao tác]Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) 14
1.3 Các cấp độ cô lập
● Concurrency control là gì?
● Các lỗi tương tranh nào sẽ được giải quyết?
● Hai cấp độ cô lập mới trong SQL Server 2005
[HQTCSDL-Bài 6: Giao tác]Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) 15
Concurrency control là gì?
● Là những kỹ thuật dùng để khống chế tương tranh
trên môi trường nhiều người dùng
● Gồm có hai loại :
[HQTCSDL-Bài 6: Giao tác]Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) 16
oPessimistic
oOptimistic
Concurrency control là gì?
● Pessimistic concurrency
[HQTCSDL-Bài 6: Giao tác]Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) 17
oKhi giao tác T1 bắt đầu cập nhật dữ liệu thì hệ thống sẽ
khóa ngay dữ liệu này
oMột giao tác T2 muốn đọc dữ liệu thì sẽ phải chờ cho
đến khi T1 kết thúc
oSử dụng pessimistic concurrency khi dữ liệu có sự tranh
chấp cao
Concurrency control là gì?
● Optimistic concurrency
[HQTCSDL-Bài 6: Giao tác]Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) 18
oKhông khóa dữ liệu khi các giao tác bắt đầu cập nhật
oKhi một giao tác kết thúc và ghi nhận các thay đổi thì
nếu như dữ liệu đã bị thay đổi trước đó (bởi một giao tác
khác) sẽ xảy ra lỗi và kết thúc mà không ghi nhận (First
in Win)
oSử dụng pessimistic concurrency khi dữ liệu có sự tranh
chấp thấp
Các lỗi tương tranh nào sẽ được giải quyết?
● Lỗi đọc dữ liệu không chính xác (dirty read)
● Lỗi mất dữ liệu đã cập nhật (lost update)
● Lỗi đọc dữ liệu không nhất quán (non repeatable
read)
● Lỗi đọc dữ liệu không ổn định (phantom read)
[HQTCSDL-Bài 6: Giao tác]Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) 19
Các lỗi tương tranh nào sẽ được giải quyết?
● Lỗi đọc dữ liệu không chính xác (dirty read)
[HQTCSDL-Bài 6: Giao tác]Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) 20
oMột giao tác đang sửa dữ liệu nhưng chưa kết thúc
oCác giao tác khác có thể đọc thấy dữ liệu đang được sửa
oĐiều này dẫn đến các giao tác khác có thể xử lý sai nếu
dựa trên dữ liệu chưa chính xác đó
● Cấp độ cô lập được chọnSET TRANSACTION ISOLATION LEVEL READ UNCOMMITTEDSET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
1a. Minh họa gặp lỗi dirty read
[HQTCSDL-Bài 6: Giao tác]Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) 21
T1 T2Cập nhật chuyến bay 1:
đặt 5 véĐọc tổng số vé đặt của
chuyến bay 1
Đọc thấy 5
Cập nhật chuyến bay 1: đặt thêm 3 vé
Đọc thấy 8
Kết thúc ROLLBACK TRAN
Đọc thấy 0
Kết thúc COMMIT/ROLLBACK TRAN
thời gian
Giả sử tổng số vé đặt của chuyến bay 1 là 0Giả sử tổng số vé đặt của chuyến bay 1 là 0
1b. Minh họa giải quyết lỗi dirty read
[HQTCSDL-Bài 6: Giao tác]Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) 22
T1 T2Cập nhật chuyến bay 1:
đặt 5 véĐọc tổng số vé đặt của
chuyến bay 1
Xảy ra dead lock
Cập nhật chuyến bay 1: đặt thêm 3 vé
Kết thúc COMMIT/ROLLBACK TRAN
Đọc được
Kết thúc COMMIT/ROLLBACK TRANthời gian
SET TRANSACTION ISOLATION LEVEL READ COMMITTEDSET TRANSACTION ISOLATION LEVEL READ COMMITTED
Các lỗi tương tranh nào sẽ được giải quyết?
● Lỗi mất dữ liệu đã cập nhật (lost update)
[HQTCSDL-Bài 6: Giao tác]Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) 23
oHai giao tác cùng cập nhật dữ liệu
oGiao tác kết thúc sau sẽ ghi chồng lên dữ liệu của giao
tác kết thúc trước
● Lỗi đọc dữ liệu không nhất quán (non repeatable
read)oGiao tác T1 đang đọc dữ liệu
oGiao tác T2 sửa dữ liệu và giao tác T1 đọc lại thấy dữ
liệu đã bị thay đổi
2a. Minh họa gặp lỗi lost update
[HQTCSDL-Bài 6: Giao tác]Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) 24
T1 T2Muốn đặt 10 vé cho chuyến bay 1:
Kiểm tra chuyến bay còn đủ ghế ? Muốn đặt 20 vé cho chuyến bay 1:
Kiểm tra thông tin khách hàng? Kiểm tra chuyến bay còn đủ ghế ?
Nếu tất cả hợp lệ thì cho phép đặt Kiểm tra thông tin khách hàng?
Kết thúc COMMIT TRAN Nếu tất cả hợp lệ thì cho phép đặt
Tổng số vé đặt = 10 Kết thúc COMMIT TRAN
Tổng số vé đặt = 20
thời gian
Giả sử tổng số vé đặt của chuyến bay 1 là 0, tổng số ghế là 100Giả sử tổng số vé đặt của chuyến bay 1 là 0, tổng số ghế là 100
2b. Minh họa gặp lỗi non repeatable read
[HQTCSDL-Bài 6: Giao tác]Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) 25
T1 T2Muốn đặt 10 vé cho chuyến bay 1:
Kiểm tra chuyến bay còn đủ ghế ? Đọc thấy 0
Kiểm tra thông tin khách hàng? …
Nếu tất cả hợp lệ thì cho phép đặt …
Kết thúc COMMIT TRAN …
Đọc thấy 10
Kết thúc COMMIT/ROLLBACK TRAN
thời gian
Giả sử tổng số vé đặt của chuyến bay 1 là 0, tổng số ghế là 100Giả sử tổng số vé đặt của chuyến bay 1 là 0, tổng số ghế là 100
Giải quyết lỗi lost update, non repeatable read
[HQTCSDL-Bài 6: Giao tác]Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) 26
T1 T2Đọc tổng số vé đặt của chuyến bay 1,
kết quả là 0
Cập nhật chuyến bay 1: đặt 5 vé
Xảy ra dead lock
Đọc tổng số vé đặt của chuyến bay 1, kết quả vẫn là 0
Kết thúc COMMIT/ROLLBACK TRAN
Kết thúc COMMIT/ROLLBACK TRAN
thời gian
SET TRANSACTION ISOLATION LEVEL REPEATABLE READSET TRANSACTION ISOLATION LEVEL REPEATABLE READ
Các lỗi tương tranh nào sẽ được giải quyết?
● Lỗi đọc dữ liệu không ổn định (phantom read)
[HQTCSDL-Bài 6: Giao tác]Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) 27
oGiao tác T1 đang đọc dữ liệu theo điều kiện C
oGiao tác T2 thêm/xóa dữ liệu có thỏa điều kiện C
oGiao tác T1 đọc lại dữ liệu theo điều kiện C sẽ thấy có sự
thay đổi
3a. Minh họa gặp lỗi phantom read
[HQTCSDL-Bài 6: Giao tác]Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) 28
T1 T2Đếm các chuyến bay có
TpDi=‘SG’Kết quả là 3
Thêm một chuyến bay cóTpDi=‘SG’
Kết thúc COMMIT TRAN
Đếm các chuyến bay cóTpdi=‘SG’Kết quả là 4
Kết thúc COMMIT/ROLLBACK TRAN
thời gian
Giả sử các chuyến bay khởi hành từ Sài gòn là 3Giả sử các chuyến bay khởi hành từ Sài gòn là 3
3b. Giải quyết lỗi phantom read
[HQTCSDL-Bài 6: Giao tác]Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) 29
T1 T2Đếm các chuyến bay có
TpDi=‘SG’Kết quả là 3
Thêm một chuyến bay cóTpDi=‘SG’
Xảy ra dead lock
Đếm các chuyến bay cóTpdi=‘SG’
Kết quả vẫn là 3
Kết thúc COMMIT/ROLLBACK TRAN
Kết thúc COMMIT/ROLLBACK TRAN
thời gian
SET TRANSACTION ISOLATION LEVEL SERIALIZABLESET TRANSACTION ISOLATION LEVEL SERIALIZABLE
Hai cấp độ cô lập mới trong SQL Server 2005
● Cấp độ cô lập READ COMMITTED WITH SNAPSHOT
[HQTCSDL-Bài 6: Giao tác]Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) 30
oGiải quyết được lỗi dirty read
oBật thuộc tính READ_COMMITTED_SNAPSHOT là ON
oKhông xảy ra dead lock vì dữ liệu được đọc chính là dữ
liệu gốc
Hai cấp độ cô lập mới trong SQL Server 2005
● Cấp độ cô lập SNAPSHOT
[HQTCSDL-Bài 6: Giao tác]Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) 31
oGiải quyết được lỗi phantom read
oBật thuộc tính ALLOW_SNAPSHOT_ISOLATION là ON
oKhông xảy ra dead lock vì dữ liệu được đọc chính là dữ
liệu đã được chụp
Giải quyết lỗi dirty read bằng snapshot
[HQTCSDL-Bài 6: Giao tác]Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) 32
T1 T2Cập nhật chuyến bay 1: đặt 5 vé Đọc tổng số vé đặt của chuyến bay 1
Đọc thấy 0 (dữ liệu gốc)
Cập nhật chuyến bay 1: đặt thêm 3 vé
Kết thúc COMMIT TRAN
Đọc thấy 8 (dữ liệu đã cập nhật)
Kết thúc COMMIT/ROLLBACK TRAN
thời gian
SET TRANSACTION ISOLATION LEVEL READ COMMITTEDSET TRANSACTION ISOLATION LEVEL READ COMMITTED
ALTER DATABASE QLBanVe SET READ_COMMITTED_SNAPSHOT ONALTER DATABASE QLBanVe SET READ_COMMITTED_SNAPSHOT ON
Giả sử tổng số vé đặt của chuyến bay 1 là 0Giả sử tổng số vé đặt của chuyến bay 1 là 0
Giải quyết lỗi phantom read bằng snapshot
[HQTCSDL-Bài 6: Giao tác]Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) 33
T1 T2Đếm các chuyến bay có TpDi=‘SG’
Kết quả là 3
Thêm một chuyến bay có TpDi=‘SG’
Đếm các chuyến bay có Tpdi=‘SG’Kết quả vẫn là 3
Kết thúc COMMIT TRAN
Đếm các chuyến bay có Tpdi=‘SG’Kết quả vẫn là 3
Kết thúc COMMIT/ROLLBACK TRANthời gian
SET TRANSACTION ISOLATION LEVEL SNAPSHOTSET TRANSACTION ISOLATION LEVEL SNAPSHOT
ALTER DATABASE QLBanVe SET ALLOW_SNAPSHOT_ISOLATION ONALTER DATABASE QLBanVe SET ALLOW_SNAPSHOT_ISOLATION ON
Giả sử các chuyến bay khởi hành từ Sài gòn là 3Giả sử các chuyến bay khởi hành từ Sài gòn là 3
Các cấp độ cô lập trong SQL Server 2005
[HQTCSDL-Bài 6: Giao tác]Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) 34