Tôi có một quy trình với Lựa chọn mất nhiều thời gian để hoàn thành, theo thứ tự từ 5 đến 10 phút.
Tôi hiện không sử dụng NOLOCK như một gợi ý cho công cụ cơ sở dữ liệu MS SQL.
Đồng thời, chúng tôi có một quy trình khác thực hiện cập nhật và chèn vào cùng một cơ sở dữ liệu và cùng một bảng.
Quá trình đầu tiên đã bắt đầu, gần đây kết thúc sớm với một thông báo
SQLEXCEPTION: Giao dịch bị khóa trên tài nguyên khóa với một quy trình khác và đã được chọn làm nạn nhân của khóa chết.
Quá trình đầu tiên này đang chạy ở các trang web khác trong điều kiện giống hệt nhau nhưng với cơ sở dữ liệu nhỏ hơn và do đó câu lệnh select được đề cập mất một khoảng thời gian ngắn hơn nhiều (theo thứ tự 30 giây hoặc lâu hơn). Trong các trang web khác này, tôi không nhận được thông báo bế tắc trong các trang web khác này. Tôi cũng không nhận được thông báo này tại trang web đang gặp sự cố ban đầu, nhưng, tôi cho rằng, khi cơ sở dữ liệu đã phát triển, tôi tin rằng mình phải vượt qua ngưỡng nào đó. Đây là những câu hỏi của tôi:
- Có thể thời gian cần thiết để thực hiện một giao dịch làm cho quá trình liên quan có nhiều khả năng bị gắn cờ là nạn nhân của deadlock hay không.
- Nếu tôi thực hiện lựa chọn với gợi ý NOLOCK, điều này có loại bỏ được vấn đề không?
- Tôi nghi ngờ rằng trường datetime được kiểm tra như một phần của mệnh đề WHERE trong câu lệnh select đang gây ra thời gian tra cứu chậm. Tôi có thể tạo chỉ mục dựa trên trường này không? Nó có được khuyến khích không?