17
Trường Đại hc Sư phm thành phHChí 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 HQUN TRỊ CƠ SỞ DLIU 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]

06 2 Giao Tac Va Khoa

  • Upload
    itnoi

  • View
    128

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 06 2 Giao Tac Va Khoa

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]

Page 2: 06 2 Giao Tac Va Khoa

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

Page 3: 06 2 Giao Tac Va Khoa

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

Page 4: 06 2 Giao Tac Va Khoa

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

Page 5: 06 2 Giao Tac Va Khoa

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

Page 6: 06 2 Giao Tac Va Khoa

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

Page 7: 06 2 Giao Tac Va Khoa

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

Page 8: 06 2 Giao Tac Va Khoa

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

Page 9: 06 2 Giao Tac Va Khoa

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

Page 10: 06 2 Giao Tac Va Khoa

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

Page 11: 06 2 Giao Tac Va Khoa

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

Page 12: 06 2 Giao Tac Va Khoa

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

Page 13: 06 2 Giao Tac Va Khoa

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

Page 14: 06 2 Giao Tac Va Khoa

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

Page 15: 06 2 Giao Tac Va Khoa

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

Page 16: 06 2 Giao Tac Va Khoa

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

Page 17: 06 2 Giao Tac Va Khoa

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