Bài 3
Transaction và Lock
Thiết kế CSDL và thực thi với
SQL Server / Bài 3 / 2 trong 17
Nhắc lại
Nhắc lại kiến thức lập trình với T-SQL:
Khái niệm về bó lệnh (Batch) và tiến trình xử
lý Batch
Biến
Các hàm cơ bản của SQL Server
Thiết kế CSDL và thực thi với
SQL Server / Bài 3 / 3 trong 17
Mục tiêu
Nắm được khái niệm giao dịch (transaction)
Nắm được các khái niệm về thuộc tính, phân loại,
tính riêng biệt và mức độ riêng biệt của giao dịch
Sử dụng các khái niệm về transaction để thực thi
giao dịch SQL Transaction và tập lệnh (batch)
Nắm được các khái niệm khóa (lock) và khóa chết
(deadlock)
Giải quyết các deadlock bằng cách đặt mức độ ưu
tiên cho các transaction
Thiết kế CSDL và thực thi với
SQL Server / Bài 3 / 4 trong 17
Giới thiệu
Một transaction hoặc là sẽ thực hiện thành
công hoàn toàn hoặc là sẽ không thay đổi
một chút dữ liệu nào
Giao dịch (Transaction) là một đơn vị công
việc
Thiết kế CSDL và thực thi với
SQL Server / Bài 3 / 5 trong 17
Các thuộc tính Transaction
Tính hoàn chỉnh (Atomicity)
Tính nhất quán (Consistency)
Tính riêng biệt (Isolation)
Tín bền vững (Durability)
Thiết kế CSDL và thực thi với
SQL Server / Bài 3 / 6 trong 17
Phân loại Transaction
Giao dịch tường minh (Explicit transaction)
Giao dịch ngầm định (Implicit transaction)
Giao dịch xác nhận (Commit transaction)
Thiết kế CSDL và thực thi với
SQL Server / Bài 3 / 7 trong 17
Transaction Isolation và
Isolation Levels
Read Uncommitted
Read Committed
Repeatable read
Serializable
Thiết kế CSDL và thực thi với
SQL Server / Bài 3 / 8 trong 17
Sử dụng Transaction Log
Nhật ký giao dịch (Transaction log) là một File riêng biệt (hoặc lưu
ở vùng đĩa riêng) ở trong database server nó lưu trữ dấu vết thực
hiện của các thao tác
Bằng cách lưu trữ dấu vết thực hiện trong têp nhật ký (log),
database server dễ dàng khôi phục lại dữ liệu khi gặp sự cố
Transaction log đảm bảo tính hoàn chỉnh và tính bền vững
SQL Server viết tất cả các thay đổi trên CSDL xuống transaction
log, vì vậy nếu transaction đã bắt đầu nhưng chưa chạy xong,
chúng ta vẫn có thể phục hồi lại tất cả các thay đổi từ file log
Thiết kế CSDL và thực thi với
SQL Server / Bài 3 / 9 trong 17
Transaction với T-SQL
BEGIN TRANSACTION
COMMIT TRANSACTION
ROLLBACK TRANSACTION
SAVE TRANSACTION
Thiết kế CSDL và thực thi với
SQL Server / Bài 3 / 10 trong
17
Locks
Khóa (Lock) được sinh ra để giới hạn quyền truy
nhập trên môi trường đa người dùng
Microsoft SQL Server 2000 sử dụng lock để đảm bảo
tính toàn vẹn của transaction và tính thống nhất của
database
Nếu lock không được sử dụng, dữ liệu bên trong
CSDL có thể bị sai về logíc, và các query chạy trên
đó sẽ đưa ra các kết quả không mong đợi
Bản chất của lock là việc một người muốn truy nhập
riêng vào một bảng, vì vậy server sẽ lock bảng đó lại
cho riêng người đó
Thiết kế CSDL và thực thi với
SQL Server / Bài 3 / 11 trong
17
Phân loại các Locks trong
SQL Server
Pessimistic Lock
Optimistic Lock
Shared Locks
Exclusive Locks
Update Locks
Thiết kế CSDL và thực thi với
SQL Server / Bài 3 / 12 trong
17
Deadlock
Một deadlock xảy ra khi có 2 người dùng (hoặc 2 phiên làm
việc) đã đặt khóa trên 2 đối tượng riêng, và mỗi user muốn đặt
khóa trên đối tượng của user kia. Mỗi user đều phài đợi người
kia giải phóng khóa của họ ra để mình có thể đặt khóa.
SQL Server tự động nhận ra deadlock và giải quyết bằng cách
chọn một ứng dụng và bắt nó phải giải phóng khóa, trong khi
đó vẫn cho ứng dụng còn lại chạy tiếp.
Cách tốt nhất để tránh deadlock là tránh nó. Một cách để tránh
nó là không chạy các transaction đồng thời.
Thiết kế CSDL và thực thi với
SQL Server / Bài 3 / 13 trong
17
Giải quyết Deadlock
SET DEADLOCK_PRIORITY
SET LOCK_TIMEOUT
Thiết kế CSDL và thực thi với
SQL Server / Bài 3 / 14 trong
17
Tóm tắt
Quá trình truy nhập và thay đổi nội dung CSDL được gọi là giao
dịch (transaction)
Một transaction có thể thao tác cả đọc lẫn ghi. Khi transaction
được thực hiện bởi nhiều user có thể sẽ chạy đồng thời và truy
nhập lẫn các đối tượng của CSDL.
Các thuộc tính của Transaction là:
Atomicity
Consistency
Isolation
Durability
Các thuộc tính trên còn được gọi là thuộc tính
ACID
Thiết kế CSDL và thực thi với
SQL Server / Bài 3 / 15 trong
17
Tóm tắt (tiếp)…
Các transaction có thể phân loại như sau:
Explicit transaction
Implicit transaction
Commit transaction
Chuẩn ANSI SQL quy định 4 mức độ chạy riêng biệt của
transaction. Các mức độ này chỉ ra cách chạy transaction với
mức độ riêng biệt của dữ liệu. Các mức độ như sau:
Read Uncommitted
Read Committed
Repeatable read
Serializable
Thiết kế CSDL và thực thi với
SQL Server / Bài 3 / 16 trong
17
Tóm tắt (tiếp)…
Transaction log là một phần quan trọng để bảo vệ dữ liẹu. Bằng
cách ghi lại vết các thao tác trong log, database server dễ dàng
khôi phục lại dữ liệu khi gặp sự cố.
Transact-SQL sử dụng các câu lệnh sau để quản lý transaction:
BEGIN TRANSACTION
COMMIT TRANSACTION
ROLLBACK TRANSACTION
SAVE TRANSACTION
Lock được sử dụng để giới hạn truy nhập dữ liệu trong môi
trường đa người dùng. SQL Server tự động lock các tài nguyên
record, field, hoặc file, để ngăn cản các thao tác đồng thời trên
dữ liệu.
Thiết kế CSDL và thực thi với
SQL Server / Bài 3 / 17 trong
17
Tóm tắt (tiếp)…
Các kiểu của Lock:
Pessimistic Locks
Optimistic locks
Shared Locks
Exclusive Locks
Update Locks
Deadlock xẩy ra khi có 2 user (hoặc 2 phiên làm
việc) đã lock 2 đối tượng riêng, và mỗi user muốn
lock đối tượng của user kia. Mỗi user đều phải đợi
người kia giải phóng lock của họ ra để mình có thể
lock.