Hệ quản trị cơ sở dữ liệu - Chương 5: Điều khiển cạnh tranh

Một trong các tính chất cơbản của một giao dịch là tính cô lập. Khi một vài giao dịch thực

hiện một cách cạnh tranh trong CSDL, tính cô lập có thểkhông được bảo tồn. Đối với hệthống,

cần phải điều khiển sựtrao đổi giữa các giao dịch cạnh tranh; sự điều khiển này được thực hiện

thông qua một trong tập hợp đa dạng các cơchế được gọi là sơ đồ điều khiển cạnh tranh.

Các sơ đồ điều khiển cạnh tranh được xét trong chương này được dựa trên tính khảtuần

tự. Trong chương này ta cũng xét sựquản trịcác giao dịch thực hiện cạnh canh nhưng không xét

đến sựcốhỏng hóc.

pdf23 trang | Chuyên mục: SQL Server | Chia sẻ: dkS00TYs | Lượt xem: 3569 | Lượt tải: 4download
Tóm tắt nội dung Hệ quản trị cơ sở dữ liệu - Chương 5: Điều khiển cạnh tranh, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
ầu một hạng mục 
dữ liệu hiện đang bị giữ bởi Tj , Ti được phép chờ chỉ nếu nó có tem thời gian lớn hơn 
của Tj , nếu không Tj bị cuộn lại (Wounded). 
 Một điều quan trọng là phải đảm bảo rằng, mỗi khi giao dịch bị cuộn lại, nó không bị chết 
đói (starvation) có nghĩa là nó sẽ không bị cuộn lại lần nữa và được phép tiến triển. 
 Cả hai sơ đồ Wound-Wait và Wait-Die đều tránh được sự chết đói: tại một thời điểm, có 
một giao dịch với tem thời gian nhỏ nhất. Giao dịch này không thể bị yêu cầu cuộn lại trong cả 
hai sơ đồ. Do tem thời gian luôn tăng và do các giao dịch không được gán tem thời gian mới khi 
chúng bị cuộn lại, một giao dịch bị cuộn lại sẽ có tem thời gian nhỏ nhất (vào thời gian sau) và sẽ 
không bị cuộn lại lần nữa. 
Tuy nhiên, có những khác nhau lớn trong cách thức hoạt động của hai sơ đồ: 
• Trong sơ đồ Wait-Die, một giao dịch già hơn phải chờ một giao dịch trẻ hơn giải 
phóng hạng mục dữ liệu. Như vậy, giao dịch già hơn có xu hướng bị chờ nhiều hơn. 
Ngược lại, trong sơ đồ Wound-Wait, một giao dịch già hơn không bao giờ phải 
chờ một giao dịch trẻ hơn. 
• Trong sơ đồ Wait-Die, nếu một giao dịch Ti chết và bị cuộn lại vì nó đòi hỏi một 
hạng mục dữ liệu bị giữ bởi giao dịch Tj , khi đó Ti có thể phải tái phát ra cùng dãy 
các yêu cầu khi nó khởi động lại. Nếu hạng mục dữ liệu vẫn bị chiếm bởi Tj , Ti bị 
chết lần nữa. Như vậy, Ti có thể bị chết vài lần trước khi tậu được hạng mục dữ liệu 
cần thiết. Trong sơ đồ Wound-Wait, Giao dịch Ti bị thương và bị cuộn lại do Tj 
yêu cầu hạng mục dữ liệu nó chiếm giữ. Khi Ti khởi động lại, và yêu cầu hạng mục 
dữ liệu, bây giờ, đang bị Tj giữ, Ti chờ. Như vậy, có ít cuộn lại hơn trong sơ đồ 
Wound-Wait. 
Một vấn đề nổi trội đối với cả hai sơ đồ là có những cuộn lại không cần thiết vẫn xảy ra. 
CHƯƠNG V ĐIỀU KHIỂN CẠNH TRANH Trang 113
HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU 
V.4.2. SƠ ĐỒ DỰA TRÊN TIMEOUT 
Một cách tiếp cận khác để quản lý deadlock được dựa trên lock timeout. Trong cách tiếp 
cận này, một giao dịch đã yêu cầu một chốt phải chờ nhiều nhất một khoảng thời gian xác định. 
Nếu chốt không được cấp trong khoảng thời gian này, giao dịch được gọi là mãn kỳ (time out), 
giao dịch tự cuộn lại và khởi động lại. Nếu có một deadlock, một hoặc một vài giao dịch dính líu 
đến deadlock sẽ time out và cuộn lại, để các giao dịch khác tiến triển. Sơ đồ này nằm trung gian 
giữa phòng ngừa deadlock và phát hiện và khôi phục deadlock. 
Sơ đồ timeout dễ thực thi và hoạt động tốt nếu giao dịch ngắn và nếu sự chờ đợi lâu là do 
deadlock. Tuy nhiên, khó quyết định được khoảng thời gian timeout. Sơ đồ này cũng có thể đưa 
đến sự chết đói. 
V.4.3. PHÁT HIỆN DEADLOCK VÀ KHÔI PHỤC 
Nếu một hệ thống không dùng giao thức phòng ngừa deadlock, khi đó sơ đồ phát hiện và 
khôi phục phải được sử dụng. Một giải thuật kiểm tra trạng thái của hệ thống được gọi theo một 
chu kỳ để xác định xem deadlock có xẩy ra hay không. Nếu có, hệ thống phải khôi phục lại từ 
deadlock, muốn vậy hệ thống phải: 
• Duy trì thông tin về sự cấp phát hiện hành các hạng mục dữ liệu cho các giao dịch 
cũng như các yêu cầu hạng mục dữ liệu chưa được chưa được giải quyết. 
• Cung cấp một thuật toán sử dụng các thông tin này để xác định hệ thống đã đi vào 
trạng thái deadlock chưa. 
• Phục hồi từ deadlock khi phát hiện được deadlock đã xảy ra. 
V.4.3.1 PHÁT HIỆN DEADLOCK 
 Deadlock có thể mô tả chính xác bằng đồ thị định hướng được gọi là đồ thị chờ (wait for 
graph). Đồ thị này gồm một cặp G = , trong đó V là tập các đỉnh và E là tập các cung. 
Tập các đỉnh gồm tất cả các giao dịch trong hệ thống. Mỗi phần tử của E là một cặp Ti → Tj , nó 
chỉ ra rằng Ti chờ Tj giải phóng một hạng mục dữ liệu nó cần. 
Khi giao dịch Ti yêu cầu một hạng mục dữ liệu đang bị giữ bởi giao dịch Tj khi đó 
cung Ti → Tj được xen vào đồ thị. Cạnh này bị xoá đi chỉ khi giao dịch Tj không còn giữ hạng 
mục dữ liệu nào mà Ti cần. 
Deadlock tồn tại trong hệ thống nếu và chỉ nếu đồ thị chờ chứa một chu trình. Mỗi giao 
dịch tham gia vào chu trình này được gọi là bị deadlock. Để phát hiện deadlock, hệ thống phải 
duy trì đồ thị chờ và gọi theo một chu kỳ thủ tục tìm kiếm chu trình. Ta xét ví dụ sau: 
 T26 T28 
 T25
 T27 
Đồ thị chờ (phi chu trình) 
figure V- 19 
CHƯƠNG V ĐIỀU KHIỂN CẠNH TRANH Trang 114
HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU 
Do đồ thị không có chu trình nên hệ thông không trong trạng thái deadlock. Bây giờ, giả 
sử T28 yêu cầu một hạng mục dữ liệu được giữ bởi T27 , cung T28 → T27 được xen vào đồ thị, điều 
này dẫn đến tồn tại một chu trình T26 → T27 → T28 → T26 có nghĩa là hệ thống rơi vào tình trạng 
deadlock và T26 , T27 , T28 bị deadlock. 
 T26 T28 
 T25 
 T27 
figure V- 20 
Vấn đề đặt ra là khi nào thì chạy thủ tục phát hiện ? câu trả lời phụ thuộc hai yêu tố sau: 
1. Deadlock thường xảy ra hay không ? 
2. Bao nhiêu giao dịch sẽ bị ảnh hưởng bởi deadlock 
Nếu deadlock thường xảy ra, việc chạy thủ tục phát hiện diễn ra thường xuyên hơn. Các 
hạng mục dữ liệu được cấp cho các giao dịch bị deadlock sẽ không sẵn dùng cho các giao dịch 
khác đến khi deadlock bị phá vỡ. Hơn nữa, số chu trình trong đồ thị có thể tăng lên. Trong trường 
hợp xấu nhất, ta phải gọi thủ tục phát hiện mỗi khi có một yêu cầu cấp phát không được cấp ngay. 
V.4.3.2 KHÔI PHỤC TỪ DEADLOCK 
Khi thuật toán phát hiện xác định được sự tồn tại của deadlock, hệ thống phải khôi phục từ 
deadlock. Giải pháp chung nhất là cuộn lại một vài giao dịch để phá vỡ deadlock. Ba việc cần 
phải làm là: 
1. Chọn nạn nhân. Đã cho một tập các giao dịch bị deadlock, ta phải xác định giao dịch 
nào phải cuộn lại để phá vỡ deadlock. Ta sẽ cuộn lại các giao dịch sao cho giá phải trả 
là tối thiểu. Nhiều nhân tố xác định giá của cuộn lại: 
a. Giao dịch đã tính toán được bao lâu và bao lâu nữa. 
b. Giao dịch đã sử dụng bao nhiêu hạng mục dữ liệu 
c. Giao dịch cần bao nhiêu hạng mục dữ liệu nữa để hoàn tất. 
d. Bao nhiêu giao dịch bị cuộn lại. 
2. Cuộn lại (Rollback). Mỗi khi ta đã quyết định được giao dịch nào phải bị cuộn lại, ta 
phải xác định giao dịch này bị cuộn lại bao xa. Giải pháp đơn giản nhất là cuộn lại toàn 
bộ: bỏ dở giao dịch và bắt đầu lại nó. Tuy nhiên, sẽ là hiệu quả hơn nếu chỉ cuộn lại 
giao dịch đủ xa như cần thiết để phá vỡ deadlock. Nhưng phương pháp này đòi hỏi hệ 
thống phải duy trì các thông tin bổ xung về trạng thái của tất cả các giao dịch đang 
chạy. 
3. Sự chết đói (Starvation). Trong một hệ thống trong đó việc chọn nạn nhân dựa trên 
các nhân tố giá, có thể xảy ra là một giao dịch luôn là nạn nhân của việc chọn này và 
kết quả là giao dịch này không bao giờ có thể hoàn thành. Tình huống này được gọi là 
sự chết đói. Phải đảm bảo việc chọn nạn nhân không đưa đến chết đói. Một giải pháp 
xem số lần bị cuộn lại của một giao dịch như một nhân tố về giá. 
CHƯƠNG V ĐIỀU KHIỂN CẠNH TRANH Trang 115
HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU 
V.5. BÀI TẬP CHƯƠNG V 
V.1 Chứng tỏ rằng giao thức chốt hai kỳ đảm bảo tính khả tuần tự xung đột và các giao dịch có 
thể được làm tuần tự tương ứng với các điểm chốt của chúng. 
V.2 Xét hai giao dịch sau: 
 T31 : Read(A); 
 Read(B); 
 If A=0 then B:=B+1; 
 Write(B); 
 T32 : Read(B); 
 Read(A); 
 If B=0 then A:=A+1; 
 Write(A); 
 Thêm các chỉ thị chốt và tháo chốt vào hai giao dịch T31 và T32 sao cho chúng tuân theo 
giao thức chốt hai kỳ. Sự thực hiện các giao dịch này có thể dẫn đến deadlock ? 
V.3 Nêu các ưu điểm và nhược điểm của giao thức chốt hai kỳ nghiêm ngặt. 
V.4 Nêu các ưu điểm và nhược điểm của giao thức chốt hai kỳ nghiêm khắc. 
V.5 Bộ quản trị điều khiển cạnh tranh của một hệ CSDL phải quyết định cấp cho một đòi hỏi 
chốt hoặc bắt giao dịch yêu cầu phải chờ. Hãy thiết kế một cấu trúc dữ liệu (tiết kiệm không 
gian) cho phép bộ quản trị điều khiển cạnh tranh cho ra quyết định mau chóng. 
V.6 Xét sự mở rộng thành giao thức cây-chốt sau. Nó cho phép cả chốt shared và exclusive: 
1. Một giao dịch chỉ đọc chỉ có thể yêu cầu các chốt shared. Một giao dịch cập nhật chỉ có 
thể yêu cầu các chốt exclusive 
2. Mỗi giao dịch phải tuân theo các quy tắc của giao thức cây-chốt. Các giao dịch chỉ đọc 
đầu tiên có thể chốt bất kỳ hạng mục dữ liệu nào, các giao dịch cập nhật đầu tiên phải chốt 
gốc. 
Chứng tỏ giao thức đảm bảo tính khả tuần tự và không có deadlock 
V.7 Cho ra ví dụ về các lịch trình có thể dưới giao thức cây nhưng không thể dưới giao thức 
chốt hai kỳ và ngược lại. 
V.8 Xét một biến thể của giao thức cây, được gọi là giao thức rừng. CSDL được tổ chức như 
một rừng. Mỗi giao dịch T phải tuân theo các quy tắc sau: 
1. Chốt đầu tiên trong mỗi cây có thể trên bất kỳ hạng mục dữ liệu nào 
2. Chốt từ thứ hai trở về sau có thể được yêu cầu chỉ nếu cha của nút được yêu cầu hiện đang 
bị chốt 
3. Các hạng mục dữ liệu có thể được tháo chốt bất kỳ lúc nào 
4. Một hạng mục dữ liệu không được chốt lại bởi T sau khi T đã tháo chốt cho nó 
Chứng tỏ giao thức rừng không đảm bảo tính khả tuần tự 
CHƯƠNG V ĐIỀU KHIỂN CẠNH TRANH Trang 116
HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU 
V.9 Khi một giao dịch bị cuộn lại dưới thứ tự tem thời gian, nó được gán một tem thời gian 
mới. Tại sao không đơn giản để nó giữ lại tem thời gian cũ ? 
V.10 Trong chốt đa hạt, sự khác nhau giữa chốt tường minh và chốt ẩn là gì ? 
V.11 phương thức chốt SIX là hữu dụng trong chốt đa hạt. Phương thức exclusive và shared 
tăng cường không được sử dụng. Tại sao nó lại vô dụng ? 
V.12 Đối với mỗi một trong các giao thức sau, mô tả sắc thái ứng dụng thực tế gợi ý sử dụng 
giao thức và sắc thái gợi ý không nên sử dụng giao thức: 
1. Chốt hai kỳ 
2. Chốt hai kỳ với chốt đa hạt 
3. Giao thức cây 
4. Thứ tự tem thời gian 
5. Hợp lệ 
6. Thứ tự tem thời gian đa phiên bản 
7. Chốt hai kỳ đa phiên bản 
V.13 Chứng tỏ rằng có những lịch trình là có thể dưới giao thức chốt hai kỳ nhưng không thể 
dưới giao thức tem thời gian và ngược lại. 
V.14 Với điều kiện nào tránh deadlock ít đắt giá hơn cho phép deadlock rồi phát hiện? 
CHƯƠNG V ĐIỀU KHIỂN CẠNH TRANH Trang 117

File đính kèm:

  • pdfHQT_CSDL_chuong5.pdf
Tài liệu liên quan