Tìm hiểu về Transaction và Lock - Bài giảng
Trang 1Bài 3
Transaction và Lock
Trang 2Nhắ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
Trang 3Thiế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
Trang 4Giớ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
Trang 5Thiế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)
Trang 6Phâ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)
Trang 7Thiết kế CSDL và thực thi với SQL Server / Bài 3 / 7 trong 17
Transaction Isolation và
Isolation Levels
Repeatable read
Serializable
Trang 8Sử 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
Trang 9Thiết kế CSDL và thực thi với SQL Server / Bài 3 / 9 trong 17
Transaction với T-SQL
Trang 10 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
Trang 11Thiế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
Trang 12Deadlock
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
Trang 13Thiết kế CSDL và thực thi với SQL Server / Bài 3 / 13 trong 17
Giải quyết Deadlock
Trang 14Tó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
Trang 15Thiế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
Trang 16Tóm tắt (tiếp)…
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ố
Lock được sử dụng để giới hạn truy nhập dữ liệu trong môi
Trang 17Thiế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