Tôi thực sự gặp khó khăn khi theo dõi một số chặn chúng tôi đang gặp phải.
Trạng thái chặn SPID gốc là 'ngủ', cmd là 'TUYỆT VỜI', và sqltext
là SET TRANSACTION ISOLATION LEVEL READ COMMITTED
.
Khi tôi xem báo cáo Số lượng giao dịch hàng đầu theo số lượng giao dịch bị chặn, Câu lệnh SQL chặn là '-'.
Tôi đã thực hiện theo dõi trên SQL và khi việc chặn xảy ra truy tìm SPID chặn gốc nhưng nó thực sự không dẫn tôi đến bất cứ đâu. Các tuyên bố dấu vết cuối cùng là giống như sqltext
trên SET TRANSACTION ISOLATION LEVEL READ COMMITTED
.
Tôi đã kiểm tra tất cả các thủ tục được lưu trữ có liên quan mà tôi có thể tìm thấy để đảm bảo rằng chúng có các câu lệnh TRY / CATCH BEGIN TRAN / CAMIT TRAN / ROLLBACK TRAN (chúng tôi sử dụng các thủ tục được lưu trữ cho mọi thứ để không có câu lệnh độc lập nào được chạy). Vấn đề này mới chỉ bắt đầu xảy ra trong 24 giờ qua và không ai tuyên bố đã thực hiện bất kỳ thay đổi nào đối với hệ thống.
Giải pháp: một trong những quy trình được lưu trữ ít được sử dụng của chúng tôi có lỗi với phần chèn (số cột không khớp), nhưng chúng tôi vẫn bối rối về chính xác những gì đang xảy ra.
Khi xem xét tất cả các thông tin theo dõi, câu lệnh EXEC cho quy trình được lưu trữ này đã được liệt kê đôi khi, nhưng KHÔNG BAO GIỜ ngay trước khi BLOCK xảy ra trên SPID chặn. Có vẻ như khi nó bắt đầu chặn, dấu vết đã không ghi lại việc thực hiện nó (hoặc bất kỳ câu lệnh nào trong đó). Tuy nhiên, có những lần khác, dấu vết đã ghi lại việc thực thi và không có sự ngăn chặn nào xảy ra.
Báo cáo lỗi thủ tục được lưu trữ đến từ một người dùng và tôi có thể tìm thấy nhiều câu lệnh EXEC trong dấu vết và chạy chúng trong SSMS. Không có thời gian khi tôi chạy chúng, chúng tôi có bất kỳ chặn nào xảy ra hoặc chúng bị treo. Họ đã chạy như mong đợi (khối bắt được bắn và khôi phục giao dịch sau lỗi). Sau khi giải quyết các sửa chữa thủ tục được lưu trữ, chúng tôi đã không thấy vấn đề một lần nữa.