Deadlock là gì? Những thông tin chi tiết cần biết về Deadlock

0
33
Rate this post

Các hệ quản trị cơ sở dữ liệu, mặc dù đảm bảo tính nhất quán cho các tài nguyên trong database, nhưng lại dẫn đến hiện tượng lock lẫn nhau giữa các câu lệnh. Deadlock chính là điều này xảy ra khi hai hoặc nhiều câu lệnh cùng đọc hoặc ghi cùng một dữ liệu trong cùng một thời điểm.

Deadlock là gì?

Deadlock là hiện tượng khi một hay nhiều lệnh trong database tranh chấp tài nguyên với nhau. Trong trường hợp này, một lệnh giữ tài nguyên mà lệnh khác cần, dẫn đến không có lệnh nào có thể kết thúc để giải phóng tài nguyên. Kết quả là các câu lệnh phải chờ đợi lẫn nhau và không thể tiến hành thực hiện.

Ví dụ, Transaction T1 thực hiện lock trên một số hàng trong bảng student và cần cập nhật một số hàng khác trong bảng Grades. Trong khi đó, Transaction T2 lock trên các bản ghi mà Transaction T1 cần cập nhật trong bảng Grades, nhưng cũng cần cập nhật các bản ghi trong bảng students do Transaction T1 đã khóa.

Kết quả là:

  • Transaction T1 chờ Transaction T2 giải phóng tài nguyên.
  • Transaction T2 cũng chờ Transaction T1 giải phóng tài nguyên.

Tình huống này dẫn đến tất cả các hoạt động trong cơ sở dữ liệu đình chỉ và tồn tại mãi mãi cho đến khi deadlock được phát hiện và giải quyết trong Transaction T1 hoặc Transaction T2.

Sai lệch khi làm việc với cơ sở dữ liệu có thể để lại hậu quả nghiêm trọng, và việc sử dụng lock là một chiến lược tối ưu để ngăn chặn hiện tượng này. Tuy nhiên, deadlock lại khác biệt hoàn toàn vì không có câu lệnh nào có thể được thực hiện.

Dưới chế độ điều hành thông thường, tài nguyên chỉ được sử dụng theo quy trình sau:

  • Yêu cầu: Nếu yêu cầu không được gán ngay lập tức, quá trình đang yêu cầu phải chờ cho đến khi nhận được tài nguyên để tiến trình tiếp tục.
  • Sử dụng: Quá trình sử dụng tài nguyên.
  • Giải phóng: Quá trình có thể giải phóng tài nguyên.

Deadlock

Cách giảm khả năng xảy ra Deadlock

Một phương pháp tối ưu nhất để giảm khả năng xảy ra Deadlock là sử dụng logic nhất quán trong toàn bộ ứng dụng. Ví dụ, Transaction luôn phải truy cập vào các bảng student và grades theo cùng một thứ tự nhất định.

Nếu thứ tự truy cập cố định của hai bảng là từ student đến grades, thì Transaction T2 sẽ phải chờ Transaction T1 giải phóng tài nguyên từ bảng student trước khi bắt đầu (T2 chưa khóa tài nguyên của bảng grades). Vì vậy, T1 cần được thực hiện trước T2 để tránh Deadlock.

Cách phát hiện Deadlock

Để ngăn chặn hiệu quả Deadlock và tránh tình trạng hệ thống bị trì trệ quá lâu, các cơ sở dữ liệu cần có phương pháp phát hiện Deadlock hiệu quả. Đôi khi, cơ sở dữ liệu cần theo dõi tiến trình khóa dữ liệu, bất kể Deadlock có xảy ra hay không.

Phương pháp phát hiện Deadlock tối ưu nhất mà các cơ sở dữ liệu có thể sử dụng là Wait for graph. Phương pháp này sẽ vẽ một biểu đồ dựa trên Transaction và khóa chúng trên tài nguyên. Nếu đồ thị Wait for graph tạo ra một chu kỳ hoặc vòng tròn đóng, thì chắc chắn có Deadlock xảy ra.

Nếu cơ sở dữ liệu của bạn quá lớn, có hai phương pháp khác mà bạn có thể áp dụng là Wound Wait Scheme và Wait Die Scheme.

Một số lưu ý khi sử dụng Transaction

Khi sử dụng Transaction, bạn cần hiểu rõ ý nghĩa của chúng và tránh lạm dụng. Yếu tố quan trọng nhất của Transaction là đảm bảo chuỗi lệnh. Nếu một lệnh không hoàn thành, toàn bộ Transaction cũng sẽ không hoàn thành. Ví dụ, nếu cập nhật thông tin hồ sơ bao gồm:

  • Lệnh 1: Cập nhật tuổi trong bảng Profile.
  • Lệnh 2: Cập nhật điểm trong bảng Grades.

Bạn cần thực hiện cả hai hành động tương ứng với hai nghiệp vụ trên. Tuy nhiên, điều này không có nghĩa là lệnh 1 không được thực hiện nếu lệnh 2 không thành công. Bạn hoàn toàn có thể kiểm tra hiệu quả của lệnh 1 ngay sau khi hoàn tất và thực hiện lệnh 2. Việc không thực hiện hai lệnh cùng một lúc sẽ không làm sai nghiệp vụ hệ thống. Ngoài ra, bạn cần lưu ý:

  • Transaction ngắn sẽ có hiệu quả tốt hơn.
  • Tránh sử dụng Transaction quá nhiều.

Deadlock gây ra rắc rối và làm trì trệ cơ sở dữ liệu, khiến các dữ liệu trong hệ thống phải chờ đợi nhau để giải phóng tài nguyên. Hiểu rõ khái niệm Deadlock, cách phát hiện và giảm khả năng xảy ra Deadlock sẽ giúp hệ thống cơ sở dữ liệu của bạn hoạt động trơn tru và liên tục.

Edited by Dnulib