Điều khiển tương tranh với phương thức khóa

Một phần của tài liệu Cơ sở dữ liệu (Trang 109 - 114)

Việc sử dụng khóa nhằm đảm bảo việc dành riêng việc sử dụng

mẫu tin cho giao dịch hiện tại. Nói một cách khác, giao dịch T2 không được truy cập đến mẫu tin mà hiện tại giao dịch T1 đang sử dụng. Một giao dịch dành được khóa ưu tiên để truy cập dữ liệu; khóa được giải phóng khi giao dịch được hoàn thành, để giao dịch khác có thể khóa mẫu tin cho việc sử dụng riêng của nó.

a) Khóa hạt (lock granularity)

Khóa hạt biểu thị các mức khóa. Việc khóa có thể xảy ra tại các mức sau: khóa cơ sở dữ liệu, khóa bảng, khóa dòng hay khóa thuộc tính.

* Mức khóa cơ sở dữ liệu

Với mức khóa cơ sở dữ liệu, toàn bộ cơ sở dữ liệu được khóa, do vậy ngăn cấm việc sử dụng các bảng trong cơ sở dữ liệu bởi giao dịch khác trong khi một giao dịch nào đó đang được thực hiện. Mức khóa này tốt cho việc xử lý theo khối, nhưng không thích hợp cho các hệ quản trị đa người dùng. Với mức khóa này

một giao dịch khác không thể truy cập vào cơ sở dữ liệu, mặc dù nó không hề thao tác trên dữ liệu liên quan đến giao dịch đang được thực hiện.

* Mức khóa bảng

Trong mức khóa bảng, toàn bộ bảng sẽ được khóa, do vậy ngăn cấm việc truy cập của giao dịch khác lên các mẫu tin của bảng trong khi một giao dich nào đó đang sử dụng bảng. Nếu giao dịch yêu cầu truy cập đến một số bảng, các bảng này sẽ bị khóa. Tuy nhiên các giao dịch khác có thể truy cập đến cơ sở dữ liệu nhưng trên các bảng khác.

Mức khóa này là tốt hơn so với mức khóa cơ sở dữ liệu, nếu có nhiều giao dịch truy cập đến các bảng khacs nhau của cơ sở dữ liệu. Thì mức khóa này sẽ làm giảm hiệu năng của hệ thống.

* Mức khóa dòng (khóa bản ghi)

Mức khóa dòng hiệu quả hơn nhiều so với các mức khóa trước. Hệ quản trị cơ sở dữ liệu cho phép các giao dịch đồng thời truy cập đến các dòng khác nhau của cùng một bảng.

* Mức khóa thuộc tính

Mức khóa thuộc tính cho phép các giao dịch đồng thời truy cập đến cùng một dòng nhưng trên các thuộc tính khác nhau.

b) Các kiểu khóa

* Khóa nhị phân

Khóa nhị phân có 2 trạng thái: Khóa (locked - 1) hay giải phóng khóa (unlocked - 0). Nếu một đối tượng (cơ sở dữ liệu, bảng, dòng, thuộc tính) bị khóa bởi một giao dịch, các giao dịch khác không thể sử dụng đối tượng này. Nếu đối tượng không bị khóa, bất kỳ một giao dịch nào cũng có thể khóa đối tượng để sử dụng. Đương nhiên, một giao dịch phải giải phóng khóa đối tượng sau khi giao dịch kết thúc.

Thi gian Giao dch Các thao tác Giá tr lưu trữ 1 T1 Locked TAIKHOAN 2 T1 Đọc Sodu 100 3 T1 Sodu = 100 + 50 4 T1 Ghi Sodu 150 5 T1 Unlocked TAIKHOAN 6 T2 Locked TAIKHOAN 7 T2 Đọc Sodu 150 8 T2 Sodu = 150 + 30 9 T2 Ghi Sodu 180 10 T2 Unlocked TAIKHOAN

* Khóa chia sẻ/ khóa độc quyền (khóa dành riêng)

Nếu giao dịch T1 đạt được khóa độc quyền trên mẫu tin X thì T1 có thể thực hiện việc đọc và ghi trên mẫu tin này. Khóa dành riêng được thiết lập khi giao dịch muốn thực hiện thao tác cập nhật và mẩu tin mà khóa dành riêng muốn thiết lập phải chưa được khóa.

Nếu giao dịch T2 đạt được khóa chia sẽ trên mẫu tin X thì T2 có thể thực hiện việc đọc mà không thể ghi trên mẫu tin này. Khóa chia sẻ tồn tại khi các giao dịch đồng thời được cấp quyền ĐỌC và chúng có một khóa chung. Khóa chia sẻ được thiết lập khi giao dịch chỉ muốn đọc mẫu tin từ cơ sở dữ liệu và khóa dành riêng chưa được thiết lập trên mẫu tin này.

c) Khóa 2 pha

Phương thức khóa 2 pha xác định việc thiết lập và hủy bỏ các khóa như thế nào. Khóa 2 pha đảm bảo khả năng tuần tự cho giao dịch, nhưng nó không ngăn chặn được khóa chết. Khóa 2 pha gồm:

- Pha lên (growing): Một giao dịch có thể được cấp tất cả các khóa mà nó yêu cầu nhưng có thể không giải phóng một khóa nào.

- Pha lùi (Shrinking): Một giao dịch có thể giải phóng tất cả các khóa nhưng không thể xin cấp thêm một khóa mới nào nữa.

Phương thức khóa 2 pha phải đảm bảo các quy tắc sau: - Hai giao dịch không thể có các khóa xung đột

- Không có thao tác giải phóng khóa đặt trước một thao tác khóa trong cùng một giao dịch.

- Không có dữ liệu bị làm ảnh hưởng cho đến khi tất cả các khóa đạt được, tức là cho đến khi giao dịch đã ở điểm khóa.

Hình sau mô tả phương thức khóa 2 pha.

Điểm được khóa Khóa Giải phóng khóa Khóa Giải phóng khóa Khóa Giải phóng khóa Thời gian 1 2 3 4 5 6 Bắt đầu Các thao tác Kết thúc Pha lên Pha được khóa Pha lùi

d) Khóa chết (Deadlock)

Khóa chết tồn tại khi 2 giao dịch T1 và T2 rơi vào tình huống sau: T1 = truy cập đến mẫu tin X và Y

Nếu T1 truy cập đến mẫu tin Y, T2 không thể bắt đầu; nếu T2 truy cập đến Y, T1 không thể tiếp tục. Hậu quả, T1 và T2 chờ nhau, giao dịch này chờ giao dịch kia giải phóng khóa cho mẩu tin mà nó yêu cầu. Để hiểu rõ hơn về tình huống tạo ra khóa chết, ta xem bảng sau:

Thi gian Giao dch Tr li Trng thái khóa

Mẫu tin X Mẫu tin Y

0 Unlocked Unlocked

1 T1: LOCK(X) OK Locked Unlocked 2 T2: LOCK(Y) OK Locked Locked 3 T1: LOCK(Y) WAIT… Locked Locked 4 T2: LOCK(X) WAIT… Locked Locked 5 T1: LOCK(Y) WAIT… Locked Locked 6 T2: LOCK(X) WAIT… Locked Locked 7 T1: LOCK(Y) WAIT… Locked Locked 8 T2: LOCK(X) WAIT… Locked Locked

… ……….. ……… …….. …….

… ……….. ……… …….. …….

… ……….. ……… …….. …….

Có 3 kỹ thuật để kiểm soát các khóa chết:

- Ngăn cản khóa chết: Giao dịch yêu cầu một khóa mới được hủy bỏ nếu có khả năng xuất hiện khóa chết. Nếu một giao dịch được hủy bỏ, tất cả sự thay đổi được tạo ra bởi giao dịch phải được quay lui, và tất cả các khóa được thiết lập bởi giao dịch được giải phóng.

- Phát hiện khóa chết: Hệ quản trị cơ sở dữ liệu phải kiểm tra cơ sở dữ liệu một cách có định kỳ với các khóa chết. Nếu khóa chết được tìm thấy, một trong các giao dịch phải được hủy bỏ và các giao dịch khác vẫn tiếp tục.

- Tránh khóa chết: Giao dịch phải thiết lập tất cả các khóa nó cần trước khi thực hiện. Kỹ thuật này tránh được việc quay lui của các giao dịch xung đột bằng việc yêu cầu các khóa được thiết lập lần lượt. Tuy vậy, phương thức này làm tăng thời gian đáp ứng của các hành động.

Việc lựa chọn phương thức kiểm soát khóa chết phụ thuộc vào môi trường cơ sở dữ liệu. Nếu xác suất xảy ra khóa chết thấp, nên dùng phương thức phát hiện. Nếu xác suất xảy ra khóa chết cao, nên dùng phương thức ngăn chặn. Còn nếu thời gian đáp ứng của hệ thống không đòi hỏi cao, nên dùng phương thức tránh.

Một phần của tài liệu Cơ sở dữ liệu (Trang 109 - 114)

Tải bản đầy đủ (PDF)

(121 trang)