2012-12-12 40 views
5

Tôi chạy một Dấu vết Máy chủ SQL để theo dõi một số vấn đề bế tắc và tôi bị trúng đầu với chú thích này Parallel query worker thread was involved in a deadlock làm lý do cho bế tắc.Chuỗi công việc truy vấn song song đã tham gia vào bế tắc

enter image description here

Q1: Điều này có nghĩa là cùng một truy vấn được deadlocking nó tự? Kế hoạch thực hiện truy vấn cho thấy một số trường hợp song song.

Q2: Có cách nào để "ép buộc" SQL Server không sử dụng song song hoặc ít nhất là để tránh sử dụng nó nhiều nhất có thể?

+0

Tra cứu MAXDOP trong sách trên dòng – SQLMenace

Trả lời

7

Q1: Không Điều này chỉ có nghĩa là bế tắc liên quan đến một nhà điều hành Exchange. Về phía khách hàng, bạn sẽ nhận được lỗi "Giao dịch (Process ID n) đã bị bẻ khoá trên {thread | bộ đệm giao tiếp} tài nguyên với một quy trình khác và đã được chọn làm nạn nhân bế tắc."

Loại bế tắc này sẽ luôn bao gồm hai hoặc nhiều quy trình và sẽ luôn bao gồm tài nguyên khóa.

Here is a repro cho trường hợp này. Trong hầu hết các trường hợp, việc có chỉ mục chính xác sẽ giải quyết vấn đề này.

Khi một quá trình bế tắc với chính nó (rất hiếm khi được xây dựng mới nhất) nó được gọi là Intra-Query Parallelism bế tắc và bạn sẽ gặp lỗi như "Msg 8650, Level 13, State 1, Line 1 Intra-query parallelism gây ra máy chủ của bạn lệnh (quá trình ID n) để bế tắc. Chạy lại truy vấn mà không có truy vấn song song trong truy vấn bằng cách sử dụng tùy chọn gợi ý truy vấn (maxdop 1). " Xem this link để biết chi tiết.

Q2: Tham khảo các liên kết do Denis cung cấp.

+1

liên kết repro chết. Bạn có thể mở rộng những gì có trong liên kết không? –

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