You are on page 1of 4

4.

8 CÁC THUẬT TOÁN ĐIỀU KHIỂN ĐỒNG THỜI LẠC QUAN


Các kiểu lạc quan:
 Lock: lock ở đây không phải việc ngăn các giao dịch khác tiếp cận mục dữ
liệu mà là việc ghi lại (khóa lại?) các thuộc tính như: version, checksum,
timestamp của mục dữ liệu đó để kiểm tra (đảm bảo) chưa giao dịch nào
ghi vào mục dữ liệu. (VD: Lúc đọc thì version của data là x, nhưng lúc
kiểm tra version của data lại là y)
 Nhãn thời gian: không sử dụng thuộc tính của dữ liệu như trên, mà gán
nhãn thời gian cho giao dịch.

Hiểu đơn giản, với 2 hoặc nhiều giao dịch cùng tác động vào 1 mục dữ liệu, các
giao dịch đều được thực hiện tự do trên bản sao của mục dữ liệu đó, giao dịch nào thực
hiện ghi xong đầu tiên sẽ được chấp nhận và được ghi vào cơ sở dữ liệu thực tế. Các giao
dịch còn lại sẽ bị hủy bỏ và khởi động lại.
Thiết kế thuật toán điều khiển đồng thời lạc quan dựa nhãn thời gian, vì hai lý do:
 Phần lớn các nghiên cứu về các phương pháp đồng thời lạc quan chỉ tập trung
vào các hệ quản trị cơ sở dữ liệu tập trung, nguyên nhân sẽ trình bày ở phần
nhược điểm.
 Thuật toán điều khiển đồng thời lạc quan được mở rộng cho các hệ quản trị cơ
sở dữ liệu phân tán. Thuật toán này khác với thuật toán TO bi quan ở 2 điểm:
tính lạc quan và cách gán nhãn thời gian. Thuật toán lạc quan không có nhãn
thời gian đọc và thời gian ghi, chỉ gán nhãn thời gian cho bước kiểm tra.
Ký hiệu Tij là một giao dịch con của Ti thực hiện tại trạm j. Kiểm tra cục bộ của Tij
được thực hiện theo các quy tắc sau đây:
Quy tắc 1: Với mọi giao dịch Tk sao cho ts(Tk) < ts(Tij) đã hoàn tất bước ghi trước
khi Tij bắt đầu quá trình đọc , thì việc kiểm tra thành công các bước thực hiện giao dịch
theo đúng thứ tự tuần tự. ( Các giao dịch thực hiện tuần tự, không có tương tranh )

Quy tắc 2: Nếu có một giao dịch Tk sao cho ts(Tk) < ts(Tij) và Tk đã hoàn tất quá
trình ghi trong khi Tij đang trong bước đọc, thì kiểm tra thành công nếu WS(Tk) ∩ RS(Tij)
= ∅. (Tập ghi của Tk không có mục dữ liệu nào trùng với tập đọc của Tij, đảm bảo 2 vấn
đề: Tij không bị đọc dữ liệu cũ, Tij không bị ghi đè bởi Tk vì Tk đã hoàn thành trước đó
rồi)

Quy tắc 3: Nếu có một giao dịch Tk sao cho ts(Tk) < ts(Tij) và Tk chưa hoàn tất quá
trình đọc trước khi Tij hoàn tất pha đọc ,thì kiểm tra thành công nếu WS(Tk) ∩ RS(Tij) =
∅ và WS(Tk) ∩ WS(Tij) = ∅. (Tương tự như quy tắc 2, nhưng ở đây vì Tk chưa hoàn
thành quá trình ghi nên kiểm tra thêm việc Tk và Tij có ghi chung trên 1 mục dữ liệu
không)
Ưu điểm:
 Các thuật toán điều khiển đồng thời lạc quan cho phép mức độ hoạt động
đồng thời cao. Trong trường hợp các tương tranh giao dịch ít xảy ra, cơ chế
lạc quan thực hiện hiệu quả hơn là cơ chế khóa.
Nhược điểm:
 Nhược điểm chủ yếu của các thuật toán lạc quan là chi phí lưu trữ cao. Để
kiểm tra một giao dịch, thuật toán phải lưu các tập đọc và tập ghi của nhiều
giao dịch đã kết thúc.
 Khi giao dịch đã được kiểm tra cục bộ để đảm bảo tính nhất quán cục bộ,
thì yêu cầu cần phải được kiểm tra toàn cục để đảm bảo rằng tính nhất quán
toàn cục. Đáng tiếc hiện nay chưa có phương pháp nào để kiểm tra việc
này. (Không triển khai được trên phân tán?)
 Trong trường hợp một hoặc nhiều giao dịch xác nhận không thành công,
trong lần thử tiếp theo vẫn có thể không thành công

4.9 QUẢN LÝ BẾ TẮC


Các thuật toán điều khiển đồng thời yêu cầu giao dịch phải chờ đợi thường dẫn
đến bế tắc (deadlock). Một bế tắc có thể xảy ra khi các giao dịch phải chờ đợi một giao
dịch khác. Một cách không hình thức, một tình huống bế tắc là một tập các yêu cầu
không bao giờ được đáp ứng từ cơ chế điều khiển đồng thời.
VD: Xét giao dịch Ti và Tj đang giữ các khóa ghi trên hai thực thể x và y [nghĩa là
wli(x) và wlj(y)]. Giả sử Ti cần một rli(y) hoặc một wli(y). Vì y đang bị khóa bởi giao
dịch Tj, Ti sẽ phải đợi cho đến khi Tj giải phóng khóa ghi trên y. Tuy nhiên, trong khi chờ
đợi, Tj lại yêu cầu một khóa (đọc hoặc ghi) trên x thì có thể xảy ra bế tắc. Vì Ti sẽ bị
phong tỏa và chờ đợi Tj giải phóng khóa trên y, trong khi đó, Tj cũng sẽ đợi Ti giải phóng
khóa trên x. Như vậy, giao dịch Ti và Tj sẽ cùng phải chờ đợi vô hạn để giao dịch kia giải
phóng khóa tương ứng. (Để Ti thực hiện xong thì phải chờ Tj thực hiện xog, nhưng Tj
cũng đang chờ Ti thực hiện xong, Ti và Tj cùng chờ nhau)
Bế tắc
Bế tắc xảy ra khi trong đồ thị chờ tồn tại 1 chu trình.

Trong môi trường phân tán, nhiều giao dịch trong bế tắc có thể đang chạy ở các vị
trí khác nhau nên bế tắc cần được kiểm tra cả ở CSDL cục bộ và trên CSDL toàn cục. Vì
vậy phân tích bế tắc trên CSDL phân tán cần xây dựng cả 2 loại đồ thị chờ LWFG (Local
WFG) và GWFG (Global WFG).
VD: T1 T2 ở vị trí 1, T3 T4 ở ở vị trí 2, trên mỗi vị trí thì xét đồ thị chờ cục bộ
không tồn tại bế tắc. Nhưng xét toàn cục thì lại xuất hiện

Có ba phương pháp xử lý bế tắc: ngăn chặn, tránh, phát hiện và giải tỏa bế tắc.

4.9.1 Ngăn chặn bế tắc


Đảm bảo không để xảy ra bế tắc. Trước khi thực hiện phải khai báo các mục dữ liệu sẽ
được truy cập của giao dịch và được lưu trữ tại bộ quản lí giao dịch. Nếu tất cả các mục
dữ liệu có sẵn thì bộ quản lí cho phép tiến hành giao dịch
Làm giảm các hoạt động đồng thời và cũng mất thêm các chi phí đánh giá

4.9.2 Tránh bế tắc

You might also like