Kiểm soát đồng thời DBMS: Dấu thời gian và giao thức dựa trên khóa
Kiểm soát đồng thời là gì?
Đồng thời kiểm soát trong Hệ thống quản lý cơ sở dữ liệu là một quy trình quản lý các hoạt động đồng thời mà không xung đột với nhau. Nó đảm bảo rằng các giao dịch Cơ sở dữ liệu được thực hiện đồng thời và chính xác để tạo ra kết quả chính xác mà không vi phạm tính toàn vẹn dữ liệu của Cơ sở dữ liệu tương ứng.
Truy cập đồng thời khá dễ dàng nếu tất cả người dùng chỉ đọc dữ liệu. Không có cách nào họ có thể can thiệp lẫn nhau. Mặc dù đối với bất kỳ Cơ sở dữ liệu thực tế nào, nó sẽ có sự kết hợp giữa các hoạt động ĐỌC và VIẾT và do đó việc xử lý đồng thời là một thách thức.
Kiểm soát đồng thời DBMS được sử dụng để giải quyết các xung đột như vậy, thường xảy ra với hệ thống nhiều người dùng. Do đó, Kiểm soát đồng thời là yếu tố quan trọng nhất để Hệ thống quản lý cơ sở dữ liệu hoạt động bình thường khi hai hoặc nhiều giao dịch cơ sở dữ liệu được thực hiện đồng thời, yêu cầu truy cập vào cùng một dữ liệu.
Các vấn đề tiềm ẩn của đồng thời
Dưới đây là một số vấn đề mà bạn có thể gặp phải khi sử dụng phương pháp Kiểm soát đồng thời DBMS:
- Cập nhật bị mất xảy ra khi nhiều giao dịch chọn cùng một hàng và cập nhật hàng dựa trên giá trị đã chọn
- Các vấn đề phụ thuộc không được cam kết xảy ra khi giao dịch thứ hai chọn một hàng được cập nhật bởi giao dịch khác (đọc bẩn)
- Đọc không lặp lại xảy ra khi giao dịch thứ hai đang cố gắng truy cập vào cùng một hàng nhiều lần và đọc dữ liệu khác nhau mỗi lần.
- Vấn đề Tóm tắt không chính xác xảy ra khi một giao dịch lấy bản tóm tắt về giá trị của tất cả các phiên bản của một mục dữ liệu lặp lại và giao dịch thứ hai cập nhật một số phiên bản của mục dữ liệu cụ thể đó. Trong trường hợp đó, tóm tắt kết quả không phản ánh kết quả chính xác.
Tại sao nên sử dụng phương pháp đồng thời?
Lý do sử dụng phương pháp điều khiển đồng thời là DBMS:
- Áp dụng Cách ly thông qua loại trừ lẫn nhau giữa các giao dịch xung đột
- Để giải quyết các vấn đề xung đột đọc-ghi và ghi-ghi
- Để duy trì tính nhất quán của cơ sở dữ liệu thông qua việc liên tục duy trì các vật cản thực thi
- Hệ thống cần kiểm soát sự tương tác giữa các giao dịch đồng thời. Việc kiểm soát này đạt được bằng cách sử dụng các sơ đồ điều khiển đồng thời.
- Kiểm soát đồng thời giúp đảm bảo khả năng tuần tự hóa
Ví dụ
Giả sử có hai người đến ki-ốt điện tử cùng một lúc để mua vé xem cùng một bộ phim và cùng thời gian chiếu.
Tuy nhiên, chỉ còn một chỗ trống cho buổi chiếu phim tại rạp đó. Nếu không có khả năng kiểm soát đồng thời trong DBMS, có thể cả hai người xem phim sẽ phải mua vé. Tuy nhiên, phương pháp kiểm soát đồng thời không cho phép điều này xảy ra. Cả hai người xem phim vẫn có thể truy cập thông tin được ghi trong cơ sở dữ liệu chỗ ngồi xem phim. Nhưng kiểm soát đồng thời chỉ cung cấp vé cho người mua đã hoàn tất quá trình giao dịch trước.
Giao thức kiểm soát đồng thời
Các giao thức kiểm soát đồng thời khác nhau cung cấp các lợi ích khác nhau giữa lượng đồng thời mà chúng cho phép và lượng chi phí chung mà chúng áp đặt. Sau đây là các kỹ thuật Kiểm soát đồng thời trong DBMS:
- Giao thức dựa trên khóa
- Giao thức khóa hai pha
- Giao thức dựa trên dấu thời gian
- Giao thức dựa trên xác thực
Giao thức dựa trên khóa
Giao thức dựa trên khóa trong DBMS là một cơ chế trong đó một giao dịch không thể Đọc hoặc Ghi dữ liệu cho đến khi nó có được khóa phù hợp. Các giao thức dựa trên khóa giúp loại bỏ vấn đề đồng thời trong DBMS đối với các giao dịch đồng thời bằng cách khóa hoặc cô lập một giao dịch cụ thể cho một người dùng duy nhất.
Khóa là một biến dữ liệu được liên kết với một mục dữ liệu. Khóa này biểu thị các hoạt động có thể được thực hiện trên mục dữ liệu. Khóa trong DBMS giúp đồng bộ hóa quyền truy cập vào các mục cơ sở dữ liệu bằng các giao dịch đồng thời.
Tất cả các yêu cầu khóa được gửi tới người quản lý kiểm soát đồng thời. Giao dịch chỉ được tiến hành khi yêu cầu khóa được chấp nhận.
Khóa nhị phân: Khóa nhị phân trên một mục dữ liệu có thể ở trạng thái khóa hoặc mở khóa.
Chia sẻ/độc quyền: Loại cơ chế khóa này phân tách các khóa trong DBMS dựa trên cách sử dụng chúng. Nếu một khóa được lấy trên một mục dữ liệu để thực hiện thao tác ghi thì nó được gọi là khóa độc quyền.
1. Khóa chia sẻ (S):
Khóa chia sẻ còn được gọi là khóa chỉ đọc. Với khóa chia sẻ, mục dữ liệu có thể được chia sẻ giữa các giao dịch. Điều này là do bạn sẽ không bao giờ có quyền cập nhật dữ liệu trên mục dữ liệu.
Ví dụ: hãy xem xét trường hợp hai giao dịch đang đọc số dư tài khoản của một người. Các cơ sở dữ liệu sẽ cho phép họ đọc bằng cách đặt một khóa chung. Tuy nhiên, nếu một giao dịch khác muốn cập nhật số dư của tài khoản đó, khóa chia sẻ sẽ ngăn chặn việc đó cho đến khi quá trình đọc kết thúc.
2. Khóa độc quyền (X):
Với Khóa độc quyền, một mục dữ liệu có thể được đọc cũng như ghi. Điều này là độc quyền và không thể được giữ đồng thời trên cùng một mục dữ liệu. X-lock được yêu cầu sử dụng lệnh lock-x. Giao dịch có thể mở khóa mục dữ liệu sau khi kết thúc thao tác 'ghi'.
Ví dụ: khi giao dịch cần cập nhật số dư tài khoản của một người. Bạn có thể cho phép giao dịch này bằng cách đặt khóa X trên đó. Do đó, khi giao dịch thứ hai muốn đọc hoặc ghi, khóa độc quyền sẽ ngăn hoạt động này.
3. Giao thức khóa đơn giản
Loại giao thức dựa trên khóa này cho phép các giao dịch có được khóa trên mọi đối tượng trước khi bắt đầu hoạt động. Giao dịch có thể mở khóa mục dữ liệu sau khi kết thúc thao tác 'ghi'.
4. Khóa yêu cầu trước
Giao thức khóa xác nhận trước giúp đánh giá các hoạt động và tạo danh sách các mục dữ liệu cần thiết để bắt đầu quá trình thực thi. Trong trường hợp tất cả các khóa được cấp, giao dịch sẽ được thực hiện. Sau đó, tất cả các khóa sẽ được giải phóng khi mọi hoạt động của nó kết thúc.
Nạn đói
Đói là tình huống khi một giao dịch cần phải chờ một khoảng thời gian không xác định để có được khóa.
Sau đây là những lý do gây ra nạn đói:
- Khi sơ đồ chờ cho các mục bị khóa không được quản lý đúng cách
- Trong trường hợp rò rỉ tài nguyên
- Giao dịch tương tự được chọn làm nạn nhân nhiều lần
bế tắc
Bế tắc là tình huống cụ thể khi hai hoặc nhiều tiến trình chờ nhau giải phóng tài nguyên hoặc nhiều hơn hai tiến trình chờ tài nguyên theo chuỗi tuần hoàn.
Giao thức khóa hai pha
Giao thức khóa hai pha còn được gọi là giao thức 2PL là phương pháp kiểm soát đồng thời trong DBMS đảm bảo khả năng tuần tự hóa bằng cách áp dụng khóa cho dữ liệu giao dịch, khóa các giao dịch khác truy cập cùng dữ liệu đồng thời. Giao thức khóa hai pha giúp loại bỏ vấn đề đồng thời trong DBMS.
Giao thức khóa này chia giai đoạn thực hiện giao dịch thành ba phần khác nhau.
- Trong giai đoạn đầu tiên, khi giao dịch bắt đầu thực hiện, nó cần có sự cho phép đối với các khóa mà nó cần.
- Phần thứ hai là nơi giao dịch lấy được tất cả các khóa. Khi một giao dịch giải phóng khóa đầu tiên, giai đoạn thứ ba sẽ bắt đầu.
- Trong giai đoạn thứ ba này, giao dịch không thể yêu cầu bất kỳ khóa mới nào. Thay vào đó, nó chỉ giải phóng các khóa có được.
Giao thức Khóa hai pha cho phép mỗi giao dịch thực hiện yêu cầu khóa hoặc mở khóa theo hai bước:
- Giai đoạn phát triển: Trong giai đoạn này, giao dịch có thể nhận được các khóa nhưng không thể giải phóng bất kỳ khóa nào.
- Giai đoạn thu hẹp: Trong giai đoạn này, một giao dịch có thể giải phóng các khóa nhưng không nhận được bất kỳ khóa mới nào
Đúng là giao thức 2PL cung cấp khả năng tuần tự hóa. Tuy nhiên, nó không đảm bảo rằng tình trạng bế tắc không xảy ra.
Trong sơ đồ trên, bạn có thể thấy các bộ phát hiện bế tắc cục bộ và toàn cục đang tìm kiếm bế tắc và giải quyết chúng bằng cách tiếp tục các giao dịch về trạng thái ban đầu của chúng.
Phương pháp khóa hai pha nghiêm ngặt
Hệ thống khóa hai pha nghiêm ngặt gần như tương tự như 2PL. Điểm khác biệt duy nhất là Strict-2PL không bao giờ mở khóa sau khi sử dụng. Nó 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 khi quá trình kết thúc.
2PL tập trung
Trong Centralized 2 PL, một trang duy nhất chịu trách nhiệm về quy trình quản lý khóa. Nó chỉ có một trình quản lý khóa cho toàn bộ DBMS.
Bản sao chính 2PL
Cơ chế sao chép chính 2PL, nhiều trình quản lý khóa được phân phối đến các trang web khác nhau. Sau đó, một trình quản lý khóa cụ thể chịu trách nhiệm quản lý khóa cho một tập hợp các mục dữ liệu. Khi bản sao chính đã được cập nhật, thay đổi sẽ được truyền tới các máy phụ.
2PL phân phối
Trong loại cơ chế khóa hai pha này, Trình quản lý khóa được phân phối đến tất cả các trang web. Họ chịu trách nhiệm quản lý việc khóa dữ liệu tại địa điểm đó. Nếu không có dữ liệu nào được sao chép, nó tương đương với bản sao chính 2PL. Chi phí truyền thông của 2PL phân tán cao hơn khá nhiều so với bản sao chính 2PL
Giao thức dựa trên dấu thời gian
Giao thức dựa trên dấu thời gian trong DBMS là một thuật toán sử dụng Thời gian hệ thống hoặc Bộ đếm logic làm dấu thời gian để tuần tự hóa việc thực hiện các giao dịch đồng thời. Giao thức dựa trên Dấu thời gian đảm bảo rằng mọi thao tác đọc và ghi xung đột đều được thực hiện theo thứ tự dấu thời gian.
Giao dịch cũ hơn luôn được ưu tiên trong phương thức này. Nó sử dụng thời gian hệ thống để xác định dấu thời gian của giao dịch. Đây là giao thức đồng thời được sử dụng phổ biến nhất.
Các giao thức dựa trên khóa giúp bạn quản lý thứ tự giữa các giao dịch xung đột khi chúng sẽ thực thi. Các giao thức dựa trên dấu thời gian quản lý xung đột ngay khi một thao tác được tạo.
Ví dụ:
Suppose there are there transactions T1, T2, and T3. T1 has entered the system at time 0010 T2 has entered the system at 0020 T3 has entered the system at 0030 Priority will be given to transaction T1, then transaction T2 and lastly Transaction T3.
Ưu điểm:
- Lịch trình có thể được tuần tự hóa giống như các giao thức 2PL
- Không cần chờ đợi giao dịch, giúp loại bỏ khả năng xảy ra tình trạng bế tắc!
Nhược điểm:
Có thể xảy ra tình trạng đói nếu giao dịch tương tự được khởi động lại và liên tục bị hủy bỏ
Giao thức dựa trên xác thực
Giao thức dựa trên xác thực trong DBMS còn được gọi là Kỹ thuật kiểm soát đồng thời lạc quan là một phương pháp để tránh sự tương tranh trong các giao dịch. Trong giao thức này, các bản sao cục bộ của dữ liệu giao dịch được cập nhật thay vì chính dữ liệu đó, điều này dẫn đến ít nhiễu hơn trong khi thực hiện giao dịch.
Giao thức dựa trên xác thực được thực hiện theo ba giai đoạn sau:
- Đọc giai đoạn
- Giai đoạn xác nhận
- Giai đoạn viết
Đọc giai đoạn
Trong Giai đoạn Đọc, giao dịch có thể đọc các giá trị dữ liệu từ cơ sở dữ liệu nhưng thao tác ghi hoặc cập nhật chỉ được áp dụng cho các bản sao dữ liệu cục bộ chứ không phải cơ sở dữ liệu thực tế.
Giai đoạn xác nhận
Trong Giai đoạn xác thực, dữ liệu được kiểm tra để đảm bảo rằng không vi phạm tính tuần tự trong khi áp dụng các bản cập nhật giao dịch cho cơ sở dữ liệu.
Giai đoạn viết
Trong Giai đoạn ghi, các bản cập nhật sẽ được áp dụng cho cơ sở dữ liệu nếu xác thực thành công, nếu không thì; các bản cập nhật không được áp dụng và giao dịch được khôi phục.
Đặc điểm của giao thức đồng thời tốt
Một cơ chế DBMS kiểm soát đồng thời lý tưởng có các mục tiêu sau:
- Phải có khả năng phục hồi các lỗi trang web và truyền thông.
- Nó cho phép thực hiện song song các giao dịch để đạt được sự đồng thời tối đa.
- Cơ chế lưu trữ và phương pháp tính toán của nó phải khiêm tốn để giảm thiểu chi phí.
- Nó phải áp dụng một số ràng buộc đối với cấu trúc các hành động nguyên tử của giao dịch.
Tổng kết
- Kiểm soát đồng thời là thủ tục trong DBMS để quản lý các hoạt động đồng thời mà không xung đột với nhau.
- Cập nhật bị mất, đọc sai, đọc không lặp lại và vấn đề tóm tắt không chính xác là những vấn đề gặp phải do thiếu kiểm soát đồng thời.
- Dựa trên khóa, hai pha, dựa trên dấu thời gian, dựa trên xác thực là các loại giao thức xử lý đồng thời
- Khóa có thể được chia sẻ (S) hoặc độc quyền (X)
- Giao thức khóa hai pha còn được gọi là giao thức 2PL cần giao dịch phải có được khóa sau khi giải phóng một trong các khóa của nó. Giao thức này có 2 pha phát triển và thu hẹp.
- Thuật toán dựa trên dấu thời gian sử dụng dấu thời gian để tuần tự hóa việc thực hiện các giao dịch đồng thời. Giao thức sử dụng Thời gian hệ thống hoặc số logic như một Dấu thời gian.