Gần đây chúng tôi đã gặp sự cố trên môi trường HADR SQL Server 2014, nơi một trong các máy chủ hết luồng công nhân.
Chúng tôi nhận được tin nhắn:
Nhóm luồng cho các nhóm sẵn sàng của Luôn luôn không thể bắt đầu một luồng công nhân mới vì không có đủ các luồng công nhân khả dụng.
Tôi đã mở một câu hỏi khác, để nhận được một câu lệnh (tôi nghĩ) sẽ giúp tôi phân tích vấn đề ( Có thể xem SPID nào sử dụng trình lập lịch biểu nào (luồng công nhân) không? ). Mặc dù bây giờ tôi có truy vấn để tìm các luồng đang sử dụng hệ thống, tôi không hiểu tại sao máy chủ đó lại hết các luồng công nhân.
Môi trường của chúng tôi như sau:
- 4 máy chủ Windows 2012 R2
- Máy chủ SQL 2014
- 24 Bộ xử lý -> 832 Chủ đề của Công nhân
- Ram 256 GB
- 12 nhóm sẵn có (tổng thể)
- 642 cơ sở dữ liệu (tổng thể)
Vì vậy, máy chủ gặp sự cố có cấu hình như sau:
- 5 nhóm khả dụng (3 chính / 2 phụ)
- 325 Cơ sở dữ liệu (127 Chính / 198 Trung học)
MAXDOP = 8
Cost Threshold for Parallelism = 50
- Gói điện được đặt thành "Hiệu suất cao"
Để "giải quyết" vấn đề, chúng tôi đã thất bại một cách thủ công một Nhóm sẵn có trên máy chủ thứ cấp. Cấu hình của máy chủ đó là:
- 5 nhóm sẵn có (2 chính / 3 phụ)
- 325 Cơ sở dữ liệu (77 Chính / 248 Trung học)
Tôi đang theo dõi các chủ đề có sẵn với tuyên bố này:
declare @max int
select @max = max_workers_count from sys.dm_os_sys_info
select
@max as 'TotalThreads',
sum(active_Workers_count) as 'CurrentThreads',
@max - sum(active_Workers_count) as 'AvailableThreads',
sum(runnable_tasks_count) as 'WorkersWaitingForCpu',
sum(work_queue_count) as 'RequestWaitingForThreads' ,
sum(current_workers_count) as 'AssociatedWorkers'
from
sys.dm_os_Schedulers where status='VISIBLE ONLINE'
Thông thường máy chủ có sẵn khoảng 250 - 430 luồng công nhân, nhưng khi sự cố bắt đầu thì không còn nhân viên nào.
Hôm nay, không biết từ đâu, các công nhân có sẵn đã giảm từ 327 xuống còn 50, nhưng chỉ trong một phút và sau đó quay trở lại khoảng 400.
Tôi đã thấy câu hỏi khác ( sử dụng luồng công nhân cao HADR ) nhưng nó không giúp tôi.
Hệ thống của chúng tôi chạy ổn định trong hơn một năm mà không có vấn đề gì. Chúng tôi đã không có bất kỳ chuyển đổi dự phòng hoặc thay đổi lớn khác trong việc phân phối cơ sở dữ liệu.
Chúng tôi đang sử dụng "Cam kết đồng bộ" giữa các bản sao. Theo hiểu biết của tôi, không có nén liên quan, xem Tune nén cho nhóm khả dụng trong tài liệu.
Có ai có ý tưởng gì về việc sử dụng tất cả các luồng công nhân không?
EDIT: Tìm thấy trang này nơi có rất nhiều thông tin về chính xác những vấn đề đó http://www.techdevops.com/Article.aspx?CID=24