Những hệ quản trị cơ sở vật chất dữ liệu với vai trò đảm bảo tính nhất quán cho những tài nguyên trong database nhưng lại vô tình dẫn tới sự xuất hiện của tình trạng lock lẫn nhau giữa những câu lệnh. Và Deadlock chính là khái niệm cho sự xung đột giữa những câu lệnh lúc mà trong cùng một thời khắc cùng đọc hay ghi một dữ liệu.
Hiểu rõ khái niệm Deadlock là gì cũng như những tri thức liên quan tới Deadlock trong bài viết mà san sớt chính là cách để bạn hạn chế khả năng xảy ra Deadlock.
Deadlock là gì?
Deadlock 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 tới việc ko với lệnh nào với thể kết thúc để tiến hành phóng thích tài nguyên. Nếu hiện tượng này ko được xử lý thì sẽ xuất hiện tình trạng những câu lệnh phải chờ nhau và tất nhiên ko một tiến trình nào với thể được thực hiện tiếp.
Giả sử:
- Transaction T1 thực hiện lock một số hàng trong bảng student và cần thiết phải cập nhật một số hàng khác trong bảng Grades.
- Transaction T2 lock trên những bản ghi mà Transaction T1 cần cập nhật trong bảng Grades nhưng phải cập nhật những bản ghi với trong bảng students do Transaction T1 nắm giữ.
Điều này dẫn tới vấn đề phát sinh đó là:
- Transaction T1 chờ Transaction T2 phóng thích tài nguyên.
- Transaction T2 cũng chờ Transaction T1 phóng thích tài nguyên.
Kết quả thu được là mọi hoạt động trong cơ sở vật chất dữ liệu đều ngừng lại và tồn tại mãi mãi cho tới lúc deadlock được phát hiện và được tiến hành hủy bỏ trong Transaction T1 hoặc trong Transaction T2.
Những sai lệch lúc bạn thao tác với database thường để lại những hậu quả vô cùng nghiêm trọng và lock chính là một chiến lược tối ưu với thể ngăn chặn được hiện tượng này. Tuy nhiên, Deadlock lại hoàn toàn khác biệt bởi nó sẽ dẫn tới việc ko một câu lệnh nào với thể được thực hiện.
Dưới chế độ quản lý thông thường, tài nguyên chỉ được sử dụng theo môt quá trình với thứ tự như sau:
- Yêu cầu: Nếu những yêu cầu ko được gán một cách tức thì thì quá trình đang yêu cầu phải chờ cho tới lúc nhận được tài nguyên thì mới với thể tiếp tục tiến trình.
- Sử dụng: Quá trình quản lý tài nguyên.
- Phóng thích: Quá trình với thể phóng thích tài nguyên.
Deadlock 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
Cách giảm khả năng xảy ra Deadlock
Một phương pháp tối ưu nhất mà bạn với thể sử dụng để giảm khả năng xảy ra Deadlock chính là sử dụng logic nhất quán trong toàn bộ ứng dụng. Giả sử Transaction luôn phải truy cập vào những bảng student và grades theo cùng một thứ tự nhất định.
Nếu thứ tự truy cập nhất mực của hai bảng là từ student tới grades thì T2 sẽ phải chờ T1 thực hiện việc phóng thích tài nguyên từ bảng student rồi mới được khởi đầu (T2 chưa lock tài nguyên của bảng grades). Vì vậy, T1 cần được thực hiện một cách thông thường rồi thì T2 mới được thực hiện để tránh xảy ra tình trạng Deadlock.
Cách phát hiện Deadlock
Những cơ sở vật chất dữ liệu lúc muốn ngăn chặn triệt để tình trạng Deadlock xảy ra và dẫn tới việc hệ thống bị trì trệ quá lâu thì cần phải với phương pháp phát hiện Deadlock hiệu quả. Thậm chí, trong nhiều trường hợp, cơ sở vật chất dữ liệu cần phải theo dõi tiến trình lock dữ liệu cho dù tiến trình đó với xảy ra Deadlock hay ko.
Và phương pháp tối ưu nhất để phát hiện Deadlock mà những cơ sở vật chất dữ liệu với thể sử dụng chính là 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ì cứng cáp sẽ với một Deadlock xảy ra.
nếu cơ sở vật chất dữ liệu của bạn quá to thì hai phương pháp khác mà bạn với thể vận dụng là Wound Wait Scheme và Wait Die Scheme.
Một vài số lưu ý sử dụng Transaction
Lúc sử dụng Transaction, bạn cần phải hiểu ý nghĩa của nó một cách rõ ràng và tránh lạm dụng chúng. Yếu tố quan yếu nhất của Transaction là đảm bảo chuỗi câu lệnh. Nếu một câu lệnh ko được hoàn thành thì toàn bộ Transaction sẽ ko được hoàn thành. Nếu xuất hiện một nghiệp vụ 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
Thì bạn cần thực hiện cả hai hành động tương ứng với hai nghiệp vụ nói trên. Tuy nhiên, điều này ko với tức thị lệnh Một ko được thực hiện lúc lệnh Hai ko thực hiện thành công. Bởi ngay sau lúc hoàn thành bạn hoàn toàn với khả năng rà soát hiệu quả thực thi lệnh Một và tiến hành thực thi lệnh 2. Do đó, việc ko thực thi đồng thời hai lệnh trên sẽ ko làm sai nghiệp vụ của hệ thống. Ngoài ra, bạn cần lưu ý:
- Transaction càng ngắn thì càng đạt được hiệu quả tốt.
- Tránh sử dụng Transaction một cách tối đa.
Deadlock xảy ra mang tới cho cơ sở vật chất dữ liệu một mớ những rối rắm và hỗn độn lúc những dữ liệu trong hệ thống phải chờ nhau phóng thích dẫn tới tình trạng trì trệ hệ thống. Nắm rõ khái niệm Deadlock là gì cũng như cách phát hiện và cách giảm khả năng xảy ra Deadlock trong bài viết của Bizfly Cloud cứng cáp sẽ giúp hệ thống cơ sở vật chất dữ liệu của bạn được phóng thích tài nguyên và hoạt động trơn tru, liên tục.