DBMS - Kiểm soát đồng thời
Trong một môi trường đa chương trình nơi nhiều giao dịch có thể được thực hiện đồng thời, điều quan trọng là phải kiểm soát tính đồng thời của các giao dịch. Chúng tôi có các giao thức kiểm soát đồng thời để đảm bảo tính nguyên tử, cách ly và khả năng tuần tự hóa của các giao dịch đồng thời. Các giao thức kiểm soát đồng thời có thể được chia thành hai loại:
- Khóa các giao thức dựa trên
- Các giao thức dựa trên dấu thời gian
Giao thức dựa trên khóa
Các hệ thống cơ sở dữ liệu được trang bị các giao thức dựa trên khóa sử dụng một cơ chế mà theo đó bất kỳ giao dịch nào cũng không thể đọc hoặc ghi dữ liệu cho đến khi nó có được một khóa thích hợp trên đó. Ổ khóa có hai loại -
Binary Locks- Khóa trên một mục dữ liệu có thể ở hai trạng thái; nó bị khóa hoặc mở khóa.
Shared/exclusive- Loại cơ cấu khóa này phân biệt các ổ khóa dựa trên công dụng của chúng. Nếu một khóa có được trên một mục dữ liệu để thực hiện thao tác ghi, thì đó là khóa độc quyền. Cho phép nhiều hơn một giao dịch ghi trên cùng một mục dữ liệu sẽ dẫn cơ sở dữ liệu vào trạng thái không nhất quán. Các khóa đọc được chia sẻ vì không có giá trị dữ liệu nào được thay đổi.
Có bốn loại giao thức khóa có sẵn -
Giao thức khóa đơn giản
Các giao thức dựa trên khóa đơn giản hóa cho phép các giao dịch có được khóa trên mọi đối tượng trước khi thực hiện thao tác 'ghi'. Các giao dịch có thể mở khóa mục dữ liệu sau khi hoàn thành thao tác 'ghi'.
Giao thức khóa xác nhận quyền sở hữu trước
Các giao thức xác nhận quyền sở hữu trước đánh giá hoạt động của chúng và tạo danh sách các mục dữ liệu mà chúng cần khóa. Trước khi bắt đầu thực hiện, giao dịch yêu cầu hệ thống cung cấp trước tất cả các khóa mà nó cần. Nếu tất cả các khóa được cấp, giao dịch sẽ thực hiện và giải phóng tất cả các khóa khi tất cả các hoạt động của nó kết thúc. Nếu tất cả các khóa không được cấp, giao dịch sẽ quay trở lại và đợi cho đến khi tất cả các khóa được cấp.
Khóa hai pha 2PL
Giao thức khóa này chia giai đoạn thực hiện của một giao dịch thành ba phần. Trong phần đầu tiên, khi giao dịch bắt đầu thực hiện, nó tìm kiếm quyền cho các khóa mà nó yêu cầu. Phần thứ hai là nơi giao dịch mua lại tất cả các khóa. Ngay sau khi giao dịch phát hành khóa đầu tiên, giai đoạn thứ ba sẽ bắt đầu. Trong giai đoạn này, giao dịch không thể yêu cầu bất kỳ khóa mới nào; nó chỉ phát hành các khóa có được.
Khóa hai pha có hai giai đoạn, một là growing, nơi tất cả các khóa đang được mua bằng giao dịch; và giai đoạn thứ hai đang thu hẹp lại, nơi các ổ khóa do giao dịch nắm giữ đang được giải phóng.
Để yêu cầu một khóa độc quyền (ghi), trước tiên một giao dịch phải có được một khóa chia sẻ (đọc) và sau đó nâng cấp nó lên một khóa độc quyền.
Khóa hai pha nghiêm ngặt
Giai đoạn đầu tiên của Nghiêm ngặt-2PL cũng giống như 2PL. Sau khi có được tất cả các khóa trong giai đoạn đầu, giao dịch vẫn tiếp tục thực hiện bình thường. Nhưng trái ngược với 2PL, Nghiêm ngặt-2PL không phát hành khóa sau khi sử dụng nó. Nghiêm ngặt-2PL giữ tất cả các khóa cho đến điểm cam kết và giải phóng tất cả các khóa cùng một lúc.
Nghiêm ngặt-2PL không có hủy bỏ theo tầng như 2PL.
Giao thức dựa trên dấu thời gian
Giao thức đồng thời được sử dụng phổ biến nhất là giao thức dựa trên dấu thời gian. Giao thức này sử dụng thời gian hệ thống hoặc bộ đếm logic làm dấu thời gian.
Các giao thức dựa trên khóa quản lý thứ tự giữa các cặp xung đột giữa các giao dịch tại thời điểm thực hiện, trong khi các giao thức dựa trên dấu thời gian bắt đầu hoạt động ngay sau khi giao dịch được tạo.
Mọi giao dịch đều có một dấu thời gian được liên kết với nó và thứ tự được xác định theo độ tuổi của giao dịch. Một giao dịch được tạo ở thời gian 0002 đồng hồ sẽ cũ hơn tất cả các giao dịch khác sau nó. Ví dụ: bất kỳ giao dịch nào 'y' vào hệ thống tại 0004 đều nhỏ hơn hai giây và ưu tiên sẽ được ưu tiên cho giao dịch cũ hơn.
Ngoài ra, mọi mục dữ liệu đều được cung cấp dấu thời gian đọc và ghi mới nhất. Điều này cho phép hệ thống biết khi nào thao tác 'đọc và ghi' cuối cùng được thực hiện trên mục dữ liệu.
Giao thức đặt hàng dấu thời gian
Giao thức sắp xếp dấu thời gian đảm bảo khả năng tuần tự hóa giữa các giao dịch trong các hoạt động đọc và ghi xung đột của chúng. Đây là trách nhiệm của hệ thống giao thức rằng cặp nhiệm vụ xung đột phải được thực thi theo các giá trị dấu thời gian của các giao dịch.
- Dấu thời gian của giao dịch T i được ký hiệu là TS (T i ).
- Dấu thời gian đọc của mục dữ liệu X được ký hiệu bằng dấu thời gian R (X).
- Ghi dấu thời gian của mục dữ liệu X được ký hiệu là W-dấu thời gian (X).
Giao thức đặt hàng dấu thời gian hoạt động như sau:
If a transaction Ti issues a read(X) operation −
- Nếu TS (Ti) <W-timestamp (X)
- Thao tác bị từ chối.
- Nếu TS (Ti)> = W-dấu thời gian (X)
- Đã thực hiện thao tác.
- Đã cập nhật tất cả các dấu thời gian của mục dữ liệu.
If a transaction Ti issues a write(X) operation −
- Nếu TS (Ti) <R-timestamp (X)
- Thao tác bị từ chối.
- Nếu TS (Ti) <W-timestamp (X)
- Hoạt động bị từ chối và Ti quay trở lại.
- Nếu không, hoạt động được thực thi.
Thomas 'Viết Quy tắc
Quy tắc này cho biết nếu TS (Ti) <W-timestamp (X), thì hoạt động bị từ chối và T i được khôi phục lại.
Các quy tắc đặt hàng tem thời gian có thể được sửa đổi để làm cho chế độ xem lịch biểu có thể được tuần tự hóa.
Thay vì làm cho T i quay trở lại, bản thân hoạt động 'ghi' bị bỏ qua.