2014-04-14 17 views
6

Tôi có một thủ tục lưu trữ được gọi bằng một 2012 báo cáo SQL Server đó là dùng một tuổi để chạy trong sản xuất so với phát triển vì một phiên chặn lck_m_sSQL Server LCK_M_S chỉ xảy ra trong sản xuất

Thủ tục chạy lưu trữ ngay lập tức khi thực hiện trong SQL Server Management Studio và cũng hoạt động tốt khi được gọi là một phần của báo cáo từ một máy tính xách tay dev thông qua Visual Studio.

Khi báo cáo được tải lên máy chủ sản xuất, vấn đề chặn này xuất hiện.

Làm cách nào để tìm hiểu nguyên nhân gây ra sự cố lck_m_s khi đang sản xuất?

Trả lời

10

Execute truy vấn này khi vấn đề xảy ra một lần nữa:

select * from 
sys.dm_os_waiting_tasks t 
inner join sys.dm_exec_connections c on c.session_id = t.blocking_session_id 
cross apply sys.dm_exec_sql_text(c.most_recent_sql_handle) as h1 

Nó sẽ cung cấp cho bạn các dịch vụ spid của phiên gây ra chặn, mà trên đó tài nguyên đã bị chặn, và văn bản của truy vấn rcent nhất cho phiên đó. Điều này sẽ cho bạn một điểm khởi đầu vững chắc.

0

Bạn có một vài tùy chọn

  1. Thiết lập báo cáo quá trình chặn. Về cơ bản, bạn đặt cấu hình hệ thống blocked process threshold (s) thành số giây khác và thiết lập thông báo sự kiện trên sự kiện BLOCKED_PROCESS_REPORT. Bạn sẽ nhận được báo cáo XML mỗi lần bất kỳ quá trình nào bị chặn nhiều hơn ngưỡng bạn đã đặt. Nhược điểm này là nó sẽ được cho bất cứ điều gì bị chặn, không chỉ là thủ tục của bạn, nhưng bạn sẽ nhận được bất cứ ai đang nắm giữ các khóa không tương thích trong báo cáo.

  2. Thiết lập phiên sự kiện mở rộng cho quy trình của bạn để nắm bắt sự kiện lock_released trong đó thời lượng lâu hơn số lần bạn chờ đợi. Nhược điểm là điều này là cực kỳ nhắm mục tiêu và bạn có thể xác định phiên để bạn nhận được rất ít tiếng ồn. Nhược điểm là bạn sẽ không biết những gì quá trình đang nắm giữ khóa không tương thích (mặc dù bạn sẽ nhận được một mô tả khá chi tiết về những gì các tài nguyên bị khóa là để tiếp tục điều tra của bạn).

Các vấn đề liên quan