Deadlock là gì? Cách phát hiện và phòng tránh Deadlock

Deadlock là gì? Deadlock ảnh hưởng như thế nào đến quá trình quản trị cơ sở dữ liệu database của bạn? Mời các bạn cùng LANIT tìm hiểu về khái niệm, cách phát hiện và phòng tránh Deadlock trong bài viết dưới đây nhé!

1. Deadlock là gì?

Deadlock được hiểu là sự xung đột giữa các câu lệnh trong cùng thời điểm đọc hay ghi dữ liệu. Nó làm thay đổi tính nhất quán trong các tài nguyên của database khiến cho các lệnh còn lại không có tài nguyên để sử dụng. Sự xáo trộn này khiến cho các câu lệnh không thể kết thúc để giải phóng tài nguyên. Khi đó, tiến trình đọc/ghi dữ liệu sẽ bị lỗi, không thể hoàn thành.

Để các bạn có thể hình dung dễ hơn, chúng tôi giả sử: Transaction T1 đang cần tài nguyên để thực hiện lock một số hàng trong bảng student. Nhưng transaction 2 lại nắm giữ các tài nguyên đó. Khi đó, sẽ xảy ra các trường hợp:

  • Transaction 1 phải dừng lại để chờ transaction 2 giải phóng tài nguyên.
  • Transaction 2 cũng dừng lại để chờ transaction 1 giải phóng tài nguyên.

Tất cả điều này khiến cho hoạt động của database đều dừng lại. Nó chỉ có thể được xử lý khi deadlock được phát hiện. Và một trong 2 transaction trên sẽ bị hủy bỏ. Một quá trình hoạt động thông thường khi các tài nguyên được sử dụng như sau: Yêu cầu >> Sử dụng >> Giải phóng.

Deadlock là gì?
Deadlock là sự xung đột các câu lệnh trong quá trình đọc/ghi dữ liệu

2. Cách phát hiện Deadlock

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. Vậy, cách phát hiện Deadlock là gì? Chúng ta cùng khám phá ở những chia sẻ tiếp theo nhé!

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ẽ phản ánh lỗi dưới dạng biểu đồ dựa trên các transaction và lock chúng trên tài nguyên được sử dụng.

Nếu biểu đồ mà Wait for graph hiển thị là một vòng tròn khép kín nghĩa là có Deadlock xảy ra. Đối với các cơ sở dữ liệu có dung lượng quá lớn, để phát hiện Deadlock, chúng ta sẽ sử dụng tới phương pháp Wound Wait SchemeWait Die Scheme.

Deadlock là gì?
Wait for graph là phương thức phát hiện deadlock nhanh nhất

3. Cách phòng tránh Deadlock

3.1 Cách phòng Deadlock

Để phóng Deadlock xảy ra, chúng ta có thể áp dụng những cách sau đây:

  • Loại bỏ không có trưng dụng: CPU không thể trưng dụng một số tài nguyên từ quy trình đọc/ghi các câu lệnh. Đây chính là nguyên nhân dẫn tới hiện tượng Deadlock. Để phòng ngừa, chúng ta cần loại bỏ không có trưng dụng để lấy được tài nguyên trong quá trình chờ.
  • Bỏ chờ đợi vòng tròn: Khi Deadlock xảy ra, quá trình hoạt động của hệ thống sẽ bị mắc kẹt trong trạng thái chờ tài nguyên. Thông qua biểu đồ Wait for graph, chúng ta có thể thấy rõ hiện tượng deadlock. Khi đó, các tài nguyên sẽ theo thứ tự tăng hoặc giảm. Đối với trường hợp tăng tài nguyên thì chỉ cấp quyền truy cập vào tài nguyên bổ sung mới. Nếu số tài nguyên giảm thì cần giải phóng tài nguyên cũ để nhận tài nguyên mới
Deadlock là gì?
Loại bỏ không trưng dụng là một cách phòng ngừa deadlock

3.2 Cách tránh Deadlock

Để 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.

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

4. Cách hạn chế nguy cơ Deadlock là gì?

Deadlock rất khó để có thể ngăn chặn. Tuy nhiên, chúng ta có thể thực hiện các giải pháp giúp hạn chế và giảm thiểu hiện tượng này một cách đáng kể. Dưới đây là một số cách mà bạn có thể áp dụng.

  • Giảm bớt số lượng bảng cần sử dụng trong mỗi câu lệnh. Số bảng tham gia càng ít thì deadlock càng thấp. Tài nguyên sẽ được giải phóng một cách nhịp nhàng.
  • Sử dụng các câu lệnh dạng batch để tạo ra một script duy nhất thay vì gọi rời rạc trong database để thực thi câu lệnh. 
  • Kiểm soát và điều chỉnh thứ tự tác động các bảng giống nhau trong quá trình thực thi câu lệnh để chỉ xảy ra lock, chứ không phải deadlock.
  • Giảm thời gian round trip qua đường mạng để giải phóng tài nguyên nhanh hơn. Kết thúc giao dịch sớm hơn.
  • Gửi Script dạng batch là cách giúp sap server phân tích được toàn bộ mã Script. Từ đó, tạo ra một execution plan hiệu quả hơn, tránh được hiện tượng deadlock tốt hơn.
Deadlock là gì?
Giảm số lượng bảng cần gửi trong mỗi giao dịch sẽ hạn chế được deadlock

5. Lưu ý khi sử dụng Transaction

Khi sử dụng transaction trong SQL, 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.

Như vậy, chúng ta vừa cùng nhau tìm hiểu về Deadlock là gì. Cách phát hiện và phòng tránh Deadlock. Bạn hãy áp dụng vào thực tiễn để mang lại hiệu quả tốt nhất nhé!

avata Hải

Triệu Huyền Trang

Triệu Huyền Trang chuyên gia 3 năm kinh nghiệm trong ngành Công Nghệ, Phần Mềm. Chuyên chia sẻ các kiến thức phần mềm mã nguồn, ứng dụng và thông tin về công nghệ hữu ích.

Chat với chúng tôi qua Zalo!
Chat với chúng tôi qua Zalo!