Vài tháng trước, tôi đã gặp phải tình huống tương tự trong đó cài đặt MAXDOP là mặc định và một truy vấn bỏ chạy đã làm cạn kiệt tất cả các luồng công nhân.
Như Remus đã chỉ ra điều này được gọi là chết đói luồng công nhân .
Sẽ có một kết xuất bộ nhớ được tạo trên máy chủ của bạn khi điều kiện này xảy ra.
Nếu bạn đang ở trên 2008R2 + SP1 trở lên thì sys.dm_server_memory_dumps
bạn cũng sẽ cung cấp cho bạn vị trí tệp kết xuất.
Bây giờ trở lại vấn đề:
Có 1 luồng trình giám sát lịch trình trên mỗi nút NUMA và vì bạn có 2 nút NUMA, sẽ có 2 luồng trình giám sát lịch trình chịu trách nhiệm kiểm tra sức khỏe của tất cả các trình lập lịch cứ sau 60 giây cho nút NUMA cụ thể đó trong khi đảm bảo rằng trình lập lịch bị kẹt hoặc không phải.
Mỗi khi một yêu cầu công việc mới được kéo từ hàng đợi công nhân lập lịch, bộ đếm quy trình làm việc được tăng lên. Vì vậy, nếu bộ lập lịch có yêu cầu công việc được xếp hàng và không xử lý một trong các yêu cầu công việc trong 60 giây thì bộ lập lịch được xem là bị kẹt.
Do truy vấn bỏ trốn hoặc song song rộng rãi, sẽ xuất hiện tình trạng các luồng công nhân bắt đầu cạn kiệt vì tất cả các luồng bị chiếm bởi truy vấn chạy đơn đó hoặc chặn quá mức kéo dài và không thể thực hiện được công việc nào trừ khi quá trình vi phạm bị giết.
Đặt cược tốt nhất của bạn là trước tiên điều chỉnh cài đặt Mức độ song song tối đa của bạn . Mặc định về 0
phương tiện SQL Server có thể sử dụng tất cả các CPU có sẵn để xử lý song song và ở đó bằng cách làm cạn kiệt tất cả các luồng công nhân.
Có nhiều lý do có thể dẫn đến cạn kiệt các luồng công nhân:
- Các chuỗi chặn dài mở rộng khiến SQL Server hết luồng công nhân
- Song song mở rộng cũng dẫn đến cạn kiệt các luồng công nhân
- Chờ đợi rộng rãi cho bất kỳ loại "khóa" - spinlocks, chốt. Một spinlock mồ côi là một ví dụ.
Tham khảo câu trả lời của tôi ở đây sẽ cho bạn thấy cách bạn có thể tính giá trị MAXDOP cho phiên bản máy chủ của mình.
Ngoài ra, rất khuyến khích bạn bắt đầu thu thập thông tin thống kê Chờ về trường hợp máy chủ cơ sở dữ liệu của bạn.
max degree of parallelism
cấu hình là bao nhiêu và hiện tại bạn có bao nhiêu bộ xử lý trên máy chủ cùng với cấu hình NUMA? Bạn có thể sử dụngcoreinfo.exe
từ sysiternals để tìm ra số lượng bộ xử lý và cấu hình NUMA.