2011-09-01 27 views
5

Ai đó có thể giúp tôi đọc/hiểu biểu đồ bế tắc này không?Đọc biểu đồ deadlock SQL

Tôi không hiểu tại sao quy trình 75 yêu cầu khóa trên một đối tượng mà anh ấy đã khóa?

Deadlock graph

+0

bạn có thể gửi phản hồi "hiển thị trạng thái innoDB" nó sẽ mang tính thông tin hơn không. Nó phải chứa bế tắc cuối cùng – varela

+0

@varela - Đây là SQL Server. jaques Phiên bản nào? Trông giống như một vấn đề tương đương. –

+0

@Martin Smith. SQL Server 2008 – Jacques

Trả lời

7

Theo một bài viết blog mà tôi đã tìm thấy sự tồn tại của một "Exchange tổ chức sự kiện" chỉ ra rằng nguồn gốc của vấn đề của bạn có thể được xử lý song song trong truy vấn của bạn.

Today's Annoyingly-Unwieldy Term: "Intra-Query Parallel Thread Deadlocks"

Các bài viết ở trên đi vào chi tiết nhiều hơn, tuy nhiên rằng phần cuối là:

Giải pháp # 1: Thêm một chỉ số hoặc cải thiện các truy vấn để loại bỏ sự cần thiết cho xử lý song song. Trong hầu hết các trường hợp, việc sử dụng tính song song trong truy vấn cho biết rằng bạn có quét, sắp xếp hoặc tham gia rất lớn không được hỗ trợ bởi các chỉ mục thích hợp. Nếu bạn điều chỉnh truy vấn, bạn sẽ thường thấy rằng bạn kết thúc với một kế hoạch nhanh hơn và hiệu quả hơn nhiều mà không sử dụng song song, và do đó không phải chịu loại vấn đề này. Tất nhiên, trong một số truy vấn (đặc biệt là các truy vấn kiểu DSS/OLAP) có thể khó loại bỏ tất cả các bản quét lớn.

Cách giải quyết # 2: Buộc thực thi chuỗi đơn với gợi ý truy vấn "OPTION (MAXDOP 1)" ở cuối truy vấn. Nếu bạn không thể sửa đổi truy vấn, bạn có thể áp dụng gợi ý cho bất kỳ truy vấn nào có hướng dẫn lập kế hoạch.

Bạn có thể thử cách này để xem có sự cải thiện nào không.

+0

Cảm ơn, tôi đã quản lý để xác định và cải thiện truy vấn chạy chậm và không có khóa kể từ đó. Bạn không biết cách ngăn chặn điều này trong tương lai? Và tại sao máy chủ SQL cố gắng thông minh nếu có khả năng nó có thể rơi vào tình trạng bế tắc? (E.G Tại sao sử dụng song song?) – Jacques

+0

Liên kết được tham chiếu được tập trung vào "bế tắc" sự kiện trao đổi truy vấn nội bộ "thuần khiết" trong đó chỉ có một SPID (do đó "truy vấn trong"). Biểu đồ bế tắc của câu hỏi bao gồm một sự kiện trao đổi _plus_ một bế tắc truyền thống hơn liên quan đến 2 truy vấn (một SPID khác). Tôi đã đọc rằng các sự kiện trao đổi bế tắc bị cô lập có thể tự khắc phục (vì chúng có thể là do lỗi nội bộ) nên tập trung phải nằm trên các đối tượng được chia sẻ khác - khóa trang trong trường hợp này. – crokusek

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