SQL Server: bế tắc về tài nguyên bộ đệm truyền thông khóa


30

Điều gì có thể là lý do có thể cho loại bế tắc này? (không bế tắc nói chung)

Khóa tài nguyên bộ đệm truyền thông

Là hệ thống được chỉ định này là bộ nhớ thấp và số lượng bộ đệm đã hết giới hạn?

Lỗi chi tiết:

Giao dịch (ID quy trình 59) đã bị bế tắc trên các tài nguyên bộ đệm truyền thông khóa với một quy trình khác và đã được chọn làm nạn nhân bế tắc. Chạy lại giao dịch

Câu trả lời:


24

Thông điệp đầy đủ thường thấy:

Giao dịch (ID tiến trình 53) bị khóa bế tắc | tài nguyên bộ đệm giao tiếp với một quá trình khác và đã được chọn là nạn nhân bế tắc. Chạy lại giao dịch.

Loại khóa này thường thấy với các truy vấn khóa chết mà SQL Server đã thực hiện là song song, đôi khi được gọi là "khóa chết song song truy vấn nội bộ". Tôi đã thấy một vài tuyên bố rằng điều này cũng chỉ ra tài nguyên hệ thống thấp, mà tôi đoán có thể liên quan đến một mức độ nhỏ.

Một hướng dẫn chung mà tôi đã nhận thấy để xác định xem đó có phải là bế tắc song song hay không khi bạn kéo biểu đồ khóa chết XML (có thể được thực hiện với phiên system_health trong năm 2008 trở lên), bạn sẽ thấy các ID tiến trình khác nhau hiển thị cùng một đoạn mã trong thực hiện ngăn xếp.

Đồng thời, nhìn vào danh sách tài nguyên của biểu đồ khóa chết và lưu ý loại sự kiện bồi bàn. Chúng thường sẽ hiển thị "e_xxxxxx" hoặc đại loại như thế này có thể:

<waiter-list>
 <waiter event="e_waitPipeGetRow" type="consumer" id="process821d828" />
 <waiter event="e_waitPipeGetRow" type="consumer" id="process8209198" />
 <waiter event="e_waitPipeGetRow" type="consumer" id="process3827c18" />
 <waiter event="e_waitPipeGetRow" type="consumer" id="process3809eb8" />
 <waiter event="e_waitPipeGetRow" type="consumer" id="process8226b08" />
 <waiter event="e_waitPipeGetRow" type="consumer" id="process9acb6d8" />
 <waiter event="e_waitPipeGetRow" type="consumer" id="process6188d7828" />
 <waiter event="e_waitPipeGetRow" type="consumer" id="process381cef8" />
</waiter-list>

Để thử và giải quyết vấn đề, nhiều cách khác nhau sẽ được cung cấp trực tuyến và trong sách. Tôi thường bắt đầu bằng cách xem xét kế hoạch thực hiện của truy vấn / thủ tục và tập trung vào các khu vực đang hiển thị thực thi song song. Sau đó, từ đó cố gắng điều chỉnh truy vấn trước và sau đó là lần cuối cùng có thể bắt đầu sử dụng gợi ý truy vấn.

Gợi ý truy vấn phổ biến nhất bạn sẽ thấy được đề cập để giải quyết các bế tắc này đang triển khai MAXDOP 1. Tuy nhiên, trước khi làm điều đó, bạn có thể kiểm tra xem mức độ MAXDOP và Ngưỡng chi phí của máy chủ được đặt thành gì. Ngưỡng chi phí thường được đặt thành 5 theo mặc định và tôi muốn tăng mức đó lên 35 hoặc 40 để bắt đầu, nếu truy vấn được đề cập có chi phí thấp cho phần mã đó thì có thể không cần phải chạy song song. Tôi không thích sử dụng gợi ý truy vấn MAXDOP nhưng điều đó không có nghĩa là họ không có vị trí và mục đích của họ. chỉ là ý kiến ​​của tôi

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.