Viết mã chống deadlock thực sự rất khó. Ngay cả khi bạn truy cập vào các bảng theo cùng một thứ tự, bạn vẫn có thể gặp các bế tắc [1]. Tôi đã viết một bài đăng trên blog của mình trình bày chi tiết thông qua một số cách tiếp cận sẽ giúp bạn tránh và giải quyết các tình huống bế tắc.
Nếu bạn muốn đảm bảo hai câu lệnh / giao dịch sẽ không bao giờ bị deadlock, bạn có thể đạt được điều đó bằng cách quan sát các khóa mà mỗi câu lệnh sử dụng bằng cách sử dụng sp_lock hệ thống lưu trữ thủ tục. Để làm được điều này, bạn phải rất nhanh hoặc sử dụng giao dịch mở với gợi ý khóa giữ.
Ghi chú:
- Bất kỳ câu lệnh SELECT nào cần nhiều hơn một khóa cùng một lúc có thể gây bế tắc đối với một giao dịch được thiết kế thông minh, lấy các khóa theo thứ tự ngược lại.