You are on page 1of 9

(SOS ): PHẦN CHỮ ĐỎ LÀ PHẦN NGƯỜI THUYẾT TRÌNH TỰ NÓI , 0 GHI TRÊN

SLIDE

(HÌNH NÀY CÓ THỂ ĐỂ LÀM HÌNH THUMB MỞ ĐẦU :) )

Các hệ quản trị cơ sở dữ liệu có vai trò đảm bảo tính nhất quán cho các tài nguyên
trong database nhưng lại vô tình dẫn đến sự xuất hiện của tình trạng lock lẫn nhau
giữa các câu lệnh. Và Deadlock chính là định nghĩa cho sự xung đột giữa các câu
lệnh khi mà trong cùng một thời điểm cùng đọc hay ghi một dữ liệu.

Nội dung chính:


1. Định nghĩa
2. Điều kiện hình thành tắc nghẽn (Necessary conditions)
3. Ngăn chặn tắc nghẽn ( Deadlocks Prevention )
4. Cách phát hiện Deadlocks (Deadlocks Detection)
5. Các phương pháp xử lý (Method for handling deadlocks)
6. Các lưu ý khi sử dụng giao dịch (Transaction)
1. Định nghĩa
Deadlocks là hiện tượng mà một hay nhiều lệnh trong database tranh chấp tài
nguyên với nhau mà trong đó một lệnh giữ tài nguyên mà lệnh còn lại cần. Điều
này dẫn đến việc không có lệnh nào có thể kết thúc để tiến hành giải phóng tài
nguyên. Nếu hiện tượng này không được xử lý thì sẽ xuất hiện tình trạng các câu
lệnh phải chờ nhau và tất nhiên không một tiến trình nào có thể được thực hiện
tiếp.
 Ví dụ:
Vd1: Xét ví dụ khi 2 đoàn tàu đang hướng về phía nhau trên cùng 1 đường ray và
chỉ có 1 đường ray, không đoàn tàu nào có thể di chuyển khi chúng ở phía trước
nhau.
Vd2: Tình huống tương tự xảy ra trong hệ điều hành khi giới hạn tài nguyên có
hạn, Công việc T1 chờ T2 giải phóng tài nguyên để tiếp tục trong khi T2 cũng chờ
T1 giải phóng mới có đủ tài nguyên để hoàn thành. Kết quả thu được là mọi hoạt
động trong cơ sở dữ liệu đều dừng lại và tồn tại mãi mãi cho đến khi deadlock
được phát hiện và được tiến hành hủy bỏ trong T1 hoặc trong T2.
Vd3: Ví dụ qua cầu

 Hai (hay nhiều hơn) ô tô đối đầu nhau trên một cây cầu hẹp chỉ đủ độ rộng
cho một chiếc. Khi này bế tắc xuất hiện và nó có thể được giải quyết nếu
một hay một số ô tô lùi lại nhường đường rồi tiến lên sau.

2. Điều kiện hình thành tắc nghẽn (Necessary conditions)

Năm 1971, Coffman đã đưa ra và chứng tỏ được rằng, nếu hệ


thống tồn tại đồng thời bốn điều kiện sau đây thì hệ thống sẽ xảy
ra tắc nghẽn:
- Loại trừ lẫn nhau (Mutual Exclusion) : 2 hoặc nhiều tài nguyên không
thể chia sẻ được, nghĩa là mỗi lần chỉ có một quy trình có thể sử
dụng
- Giữ và đợi (Hold and Wait) : 1 quy trình đang giữ ít nhất 1 tài nguyên
và chờ tài nguyên.
- Không ưu tiên (No Preemption) : Không thể lấy tài nguyên từ 1 quy
trình khi quy trình giải phóng tài nguyên

Sự tắc nghẽn có thể tồn tại với ba điều kiện trên, nhưng cũng có thể không
xảy ra chỉ với 3 điều kiện đó. Để chắc chắn tắc nghẽn xảy ra cần phải có
điều kiện thư tư :
- Đợi vòng tròn (Circular Wait) : Đây là trường hợp của ví dụ 2 mà chúng ta
đã nêu ở trên. Tức là, mỗi tiến trình đang chiếm giữ tài nguyên mà tiến trình
khác đang cần.

Traffic deadlock
Ba điều kiện đầu là điều kiện cần chứ không phải là điều kiện đủ để xảy ra
tắc nghẽn. Điều kiện thứ tư là kết quả tất yếu từ ba điều kiện đầu.
3. Ngăn chặn tắc nghẽn ( Deadlocks Prevention )
Ngăn chặn tắc nghẽn là thiết kế một hệ thống sao cho hiện tượng tắc nghẽn
bị loại trừ. Các phương thức ngăn chặn tắc nghẽn đều tập trung giải quyết
bốn điều kiện gây ra tắc nghẽn, sao cho hệ thống không thể xảy ra đồng thời
bốn điều kiện :
 Đối với điều kiện loại trừ nhau (hay độc quyền) : Điều kiện này gần như
không tránh khỏi, vì sự độc quyền là cần thiết đối với tài nguyên thuộc loại
phân chia được như các biến chung, các tập tin chia sẻ, hệ điều hành cần
phải hỗ trợ sự độc quyền trên các tài nguyên này. Tuy nhiên, với những tài
nguyên thuộc loại không phân chia được hệ điều hành có thể sử dụng kỹ
thuật SPOOL (Smulataneous Peripheral Operation Online) để tạo ra nhiều
tài nguyên ảo cung cấp cho các tiến trình đồng thời.
 Đối với điều kiện giữ và đợi: Điều kiện này có thể ngăn chặn bằng cách
yêu cầu tiến trình yêu cầu tất cả tài nguyên mà nó cần tại một thời điểm và
tiến trình sẽ bị khoá (blocked) cho đến khi yêu cầu tài nguyên của nó được
hệ điều hành đáp ứng. Phương pháp này thường không hiệu quả.
 Đối với điều kiện không ưu tiên : Điều kiện này có thể ngăn chặn bằng
cách, khi tiến trình bị rơi vào trạng thái khoá, hệ điều hành có thể thu hồi tài
nguyên của tiến trình bị khoá để cấp phát cho tiến trình khác và cấp lại đầy
đủ tài nguyên cho tiến trình khi tiến trình được đưa ra khỏi trạng thái khoá.
 Đối với điều kiện chờ đợi vòng tròn: Điều kiện này có thể ngăn chặn bằng
cách phân lớp tài nguyên của hệ thống. Theo đó, nếu một tiến trình được cấp
phát tài nguyên ở lớp L, thì sau đó nó chỉ có thể yêu cầu các tài nguyên ở lớp
thấp hơn lớp L.

4. Cách phát hiện Deadlocks (Deadlocks Detection)


Deadlock càng phát hiện sớm thì việc xử lý các xung đột giữa các câu lệnh
trong quá trình quản lý cơ sở dữ liệu càng kịp thời, nhanh chóng. Tránh tình
trạng hệ thống bị trì trệ quá lâu. Hiện nay, cách phát hiện Deadlock nhanh
chóng và hiệu quả nhất chính là sử dụng Wait for graph. Phương pháp này sẽ
vẽ một biểu đồ dựa trên Transaction và lock chúng trên tài nguyên. Nếu đồ
thị được Wait for graph tạo ra một chu kỳ hay một vòng tròn khép kín thì
chắc chắn sẽ có một Deadlocks xảy ra.
- Nếu cơ sở dữ liệu của bạn quá lớn thì hai phương pháp khác mà bạn có thể
áp dụng là Wound Wait Scheme và Wait Die Scheme.

5. Các phương pháp xử lý (Method for handling deadlocks)


a. Cách tránh Deadlocks
- Để tránh deadlock, các hệ điều hành sẽ duy trì lịch sử tài nguyên tối đa để
đáp ứng cho một quá trình trước khi hệ thống được thực thi. Lúc này, trạng
thái của hệ thống sẽ được kiểm tra rất sát xao. Đảm bảo hệ điều hành đủ khả
năng phân phối tài nguyên cần thiết cho quá trình hoạt động.

Để tránh deadlock, các hệ điều hành sẽ tích trữ tài nguyên đủ cho một quá trình

- Trong phương pháp này, chúng ta nhận được tính chính xác của dữ
liệu nhưng hiệu suất sẽ giảm

b. Giải pháp khôi phục khỏi Deadlocks:


Gồm 2 giai đoạn : 1. Trong giai đoạn đầu tiên, kiểm tra trạng thái của
quy trình và kiếm tra xem có deadlocks hay không trong hệ thống
2. Nếu tìm thấy deadlocks, sẽ áp dụng thuật toán
để khôi phục
- Cũng giống phương pháp trên, chúng ta nhận được tính xác của dữ
liệu nhưng hiệu suất giảm.
c. Không biết về deadlocks
Nếu hệ thống rất hiếm khi xảy ra deadlocks, hãy để nó xảy ra và
reset lại hệ thống. Đây là cách tiếp cận mà cả Windows và UNIX đều
thực hiện, sử dụng thuật toán Ostrich.
Trong Deadlocks, hiệu suất của phương pháp này tốt hơn 2 phương
pháp trên nhưng tính chính xác có thể không cao.

6. Các lưu ý khi sử dụng giao dịch (Transaction)


Khi sử dụng transaction, chúng ta cần hiểu được giá trị và không nên lạm dụng nó.
Với mỗi giao dịch được thực hiện cần đánh giá tổng thể xem các câu lệnh/giao
dịch có xung đột nhau hay không.

Sử dụng transaction tràn lan là nguyên nhân dẫn tới deadlock nhiều hơn. Tốt nhất,
bạn nên tránh sử dụng transaction tối đa. Transaction càng ngắn thì càng mang lại
hiệu quả cao hơn.

You might also like