Professional Documents
Culture Documents
10 Concurrency Dich
10 Concurrency Dich
Hầu hết các DBMS đều có nhiều người dùng: Nhiều người dùng và chương trình
Tính đồng thời của cơ sở dữ liệu được giả định trên các hệ thống máy
Giao dịch: tập hợp các hoạt động truy cập cơ sở dữ liệu tạo
thành một đơn vị logic xử lý
write_item(X): ghi giá trị của biến chương trình X vào mục cơ sở dữ liệu có
tên X
Ví dụ về giao dịch
Giao dịch T1 và T2 truy cập vào cùng một mục dữ liệu có tên X
Xử lý giao dịch
Ví dụ về các vấn đề có thể xảy ra khi truy cập đồng thời vào cơ sở dữ
liệu (truy cập đồng thời vào cùng một mục dữ liệu):
Đọc không thể lặp lại là khi một giao dịch T đọc cùng một mục
hai lần và mục được thay đổi bởi một giao dịch khác T'
giữa hai lần đọc
Do đó, T nhận được các giá trị khác nhau cho hai lần đọc giống nhau
mục
Nguyên tử: Tất cả hoặc không có hoạt động nào trong giao dịch
Tính nhất quán: nếu một giao dịch được thực hiện hoàn toàn từ đầu
đến cuối mà không có sự can thiệp từ các giao dịch khác thì nó sẽ đưa cơ sở
dữ liệu từ trạng thái nhất quán này sang trạng thái nhất quán khác
Cô lập: việc thực hiện một giao dịch không bị can thiệp bởi bất kỳ giao
Độ bền hoặc tính lâu dài: Những thay đổi được áp dụng cho cơ sở dữ liệu
bởi một giao dịch đã cam kết phải tồn tại trong cơ sở dữ liệu
Atomic: trách nhiệm của hệ thống con phục hồi giao dịch của một
DBMS để đảm bảo
trong lược đồ cũng như mọi ràng buộc khác trên cơ sở dữ liệu
Chương trình cơ sở dữ liệu phải đảm bảo trạng thái nhất quán của cơ sở
dữ liệu, với giả định không có sự can thiệp của các giao dịch khác
Sự cô lập được thực thi bởi hệ thống con kiểm soát đồng thời của
cơ sở dữ liệu
Độ bền được thực thi bởi hệ thống con phục hồi của DBMS
Cấp 0: Một giao dịch được cho là có mức cách ly cấp 0 (không) nếu nó
không ghi đè lên các lần đọc bẩn của các giao dịch cấp cao hơn
Cấp 3, ngoài các thuộc tính cấp 2, còn có các lần đọc lặp lại
Một loại cách ly khác được gọi là cách ly ảnh chụp nhanh và một số
phương pháp kiểm soát đồng thời thực tế dựa trên điều này.
Đọc bẩn. Giao dịch T1 có thể đọc bản cập nhật của giao dịch T2 chưa
được xác nhận. Nếu T2 thất bại và bị hủy bỏ thì T1 sẽ đọc một giá trị không
Đọc không thể lặp lại. Giao dịch T1 có thể đọc một giá trị nhất định từ một
bảng. Nếu sau đó một giao dịch khác T2 cập nhật giá trị đó và T1 đọc lại giá
trị đó thì T1 sẽ thấy giá trị Phantoms khác. Giao dịch T1 có thể đọc một
tập hợp các hàng từ bảng T dựa trên mệnh đề WHERE của SQL. Giao dịch T2
chèn một hàng r mới cũng thỏa mãn điều kiện mệnh đề WHERE vào T. Bản ghi r được
gọi là bản ghi ảo vì nó không có ở đó khi T1 bắt đầu nhưng vẫn ở đó khi T1 kết
thúc
đọc bẩn: Một giao dịch đọc dữ liệu được ghi bởi một giao dịch không được
cam kết đồng thời
đọc không thể lặp lại: Một giao dịch đọc lại dữ liệu mà nó đã đọc trước đó và
phát hiện ra rằng dữ liệu đã được sửa đổi bởi một giao dịch khác
(đã được cam kết kể từ lần đọc đầu tiên) đọc ảo: Một giao dịch
thực hiện lại một truy vấn trả về một tập hợp các hàng thỏa mãn tìm kiếm điều
kiện và nhận thấy rằng tập hợp các hàng thỏa mãn điều kiện đã thay đổi do một
sự bất thường khác về tuần tự hóa giao dịch được cam kết gần đây: Kết
nhóm giao dịch không nhất quán với tất cả các thứ tự có thể có của việc chạy
BẮT ĐẦU GIAO DỊCH [ chế độ giao dịch [,…]] trong đó chế độ giao dịch là một
trong: MỨC ĐỘ ĐỘC LẬP SERIALIZABLE | ĐỌC LẶP LẠI | ĐỌC CAM KẾT |
ĐỌC KHÔNG CAM KẾT ĐỌC VIẾT | CHỈ ĐỌC BẮT ĐẦU hoặc BEGIN GIAO DỊCH có thể được sử dụng
LÀM
HOÀN LẠI
ĐIỂM LƯU
SAVEPOINT – xác định một điểm lưu trữ mới trong phạm vi hiện tại
giao dịch, cú pháp:
truy vấn SELECT (không có mệnh đề FOR UPDATE/SHARE) chỉ thấy dữ liệu đã được
cam kết trước khi truy vấn bắt đầu, nó không bao giờ thấy dữ liệu
chưa được cam kết
tiêu: chúng sẽ chỉ tìm thấy các hàng mục tiêu đã được cam kết kể từ thời điểm
bắt đầu lệnh
Mức cách ly Đọc lặp lại chỉ xem dữ liệu đã được cam kết trước khi giao dịch
bắt đầu; nó không bao giờ nhìn thấy dữ liệu không được cam kết hoặc các thay
đổi được cam kết trong quá trình thực hiện giao dịch bởi các giao dịch
đồng thời khác
Các lệnh FOR SHARE hoạt động giống như SELECT về mặt tìm kiếm các hàng mục
tiêu: chúng sẽ chỉ tìm thấy các hàng mục tiêu đã được cam kết kể từ thời điểm
bắt đầu giao dịch
Các ứng dụng sử dụng cấp độ này phải được chuẩn bị để thử lại các
giao dịch do lỗi tuần tự hóa:
LỖI: không thể tuần tự hóa quyền truy cập do cập nhật đồng thời
Mức cách ly có thể tuần tự hóa cung cấp sự cách ly giao dịch nghiêm ngặt nhất
Cấp độ này mô phỏng việc thực hiện giao dịch nối tiếp cho tất cả
các giao dịch đã cam kết; như thể các giao dịch đã được thực hiện lần lượt
Các ứng dụng sử dụng cấp độ này phải được chuẩn bị để thử lại các
giao dịch do lỗi tuần tự hóa
Khóa rõ ràng
PostgreSQL cung cấp công cụ khóa cho người dùng: khóa rõ ràng
Việc sử dụng khóa rõ ràng có thể làm tăng khả năng xảy ra bế tắc
Bế tắc có thể xảy ra trong khóa rõ ràng ở cấp độ bảng hoặc cấp độ hàng