Ai đang sử dụng chủ đề công nhân của tôi? Máy chủ SQL 2014 - HADR


10

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.

Thông báo lỗi khi nó bắt đầu

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.

-119 chủ đề có sẵn

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

Câu trả lời:


1

Cộng đồng wiki trả lời :

Bạn có số lượng cơ sở dữ liệu cao trong các nhóm khả dụng, đó sẽ là nơi các chủ đề của bạn sẽ đến. Có rất nhiều liên quan đến việc nén, mã hóa và chi phí vận chuyển. Hãy thử tắt nén, nó sẽ giảm mức sử dụng luồng của bạn khoảng một phần ba (tùy thuộc vào số lượng bản sao).

Câu hỏi được gắn thẻ SQL Server 2014, theo mặc định sẽ sử dụng nén. SQL Server 2016, theo mặc định, sẽ không sử dụng nén để đồng bộ hóa.

Bạn có thể cần phải tăng các luồng công nhân trong trường hợp, hoặc tốt hơn: cân bằng các luồng hoạt động nhất và không hoạt động trên nhiều máy chủ. Xem truy vấn nhóm Sẵn có Hỏi & Đáp có liên quan rất chậm .

Bạn cũng có thể thấy nó là một ứng dụng không thể đóng yêu cầu đúng cách. Điều này có thể dẫn đến nhiều phiên ngủ nằm xung quanh (tiêu thụ công nhân).

Số lượng luồng thực sự được sử dụng phụ thuộc vào mức độ hoạt động của cơ sở dữ liệu. Bạn có thể có 1.000 cơ sở dữ liệu và, nếu hầu hết không hoạt động 95%, bạn sẽ không gặp vấn đề gì. Có vẻ như cơ sở dữ liệu của bạn đã trở nên hoạt động thường xuyên hơn và đã ăn nhiều chủ đề của bạn hơn. Đó là dài và ngắn của nó.

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.