Kto używa moich wątków roboczych? SQL Server 2014 - HADR

10

Niedawno mieliśmy problem z naszym środowiskiem HADR programu SQL Server 2014, w którym na jednym z serwerów zabrakło wątków roboczych.

Dostaliśmy wiadomość:

Pula wątków dla grup dostępności AlwaysOn nie mogła rozpocząć nowego wątku roboczego, ponieważ nie ma wystarczającej liczby dostępnych wątków roboczych.

Komunikat o błędzie podczas uruchamiania

Otworzyłem już inne pytanie, aby uzyskać stwierdzenie, które (myślałem) powinno mi pomóc w analizie problemu ( czy można zobaczyć, który SPID używa który harmonogram (wątek roboczy)? ). Chociaż mam teraz zapytanie o znalezienie wątków korzystających z systemu, nie rozumiem, dlaczego na tym serwerze zabrakło wątków roboczych.

Nasze środowisko jest następujące:

  • 4 Windows Server 2012 R2
  • SQL Server 2014 Enterprise
  • 24 procesory -> 832 wątków roboczych
  • 256 GB pamięci RAM
  • 12 grup dostępności (ogólnie)
  • 642 bazy danych (ogólnie)

Serwer, który miał problem, miał następującą konfigurację:

  • 5 grup dostępności (3 podstawowe / 2 dodatkowe)
  • 325 baz danych (127 podstawowych / 198 wtórnych)
  • MAXDOP = 8
  • Cost Threshold for Parallelism = 50
  • Plan zasilania jest ustawiony na „Wysoka wydajność”

Aby „rozwiązać” problem, ręcznie nie udało się przełączyć jednej grupy dostępności na serwer pomocniczy. Konfiguracja tego serwera jest teraz:

  • 5 grup dostępności (2 podstawowe / 3 dodatkowe)
  • 325 baz danych (77 podstawowych / 248 wtórnych)

Monitoruję dostępne wątki za pomocą tego oświadczenia:

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'

Zwykle na serwerze dostępnych jest około 250–430 wątków roboczych, ale gdy problem się zaczął, nie było już żadnych pracowników.

-119 dostępnych wątków

Dzisiaj, znikąd, liczba dostępnych pracowników spadła z 327 do 50, ale tylko na minutę, a następnie wróciła do około 400.

Widziałem już inne pytanie ( użycie wątku HADR o wysokim obciążeniu procesu roboczego ), ale to mi nie pomaga.

Nasz system działał stabilnie przez ponad rok bez żadnych problemów. Nie mieliśmy żadnych przełączeń awaryjnych ani innych poważnych zmian w dystrybucji baz danych.

Używamy „synchronicznego zatwierdzenia” między replikami. Z mojego zrozumienia nie jest wymagana żadna kompresja, zobacz temat Dostrajanie kompresji dla grupy dostępności w dokumentacji.

Czy ktoś ma pojęcie, co wykorzystuje wszystkie wątki robocze?

EDYCJA: Znalazłem tę stronę, na której jest wiele informacji na temat dokładnie tych problemów http://www.techdevops.com/Article.aspx?CID=24

Dan Stef
źródło

Odpowiedzi:

1

Odpowiedź wiki społeczności :

Masz dużą liczbę baz danych w grupach dostępności, to właśnie tam będą Twoje wątki. Wiele wiąże się z kompresją, szyfrowaniem i kosztami transportu. Spróbuj wyłączyć kompresję, zmniejszy to zużycie wątku o około jedną trzecią (w zależności od liczby replik).

Pytanie jest oznaczone jako SQL Server 2014, który domyślnie użyje kompresji. SQL Server 2016 domyślnie nie używa kompresji do synchronizacji.

Konieczne może być zwiększenie wątków roboczych w instancji lub lepiej: zrównoważenie najbardziej aktywnych i nieaktywnych na wielu serwerach. Zobacz powiązane pytania i pytania dotyczące grupy AlwaysON Availability bardzo wolno .

Może się również okazać, że jest to aplikacja, która nie może poprawnie zamykać wniosków. Może to spowodować wiele leżących dookoła sesji snu (które pochłaniają pracowników).

Liczba faktycznie używanych wątków zależy od tego, jak aktywne są bazy danych. Możesz mieć 1000 baz danych, a jeśli większość jest bezczynna w 95% przypadków, nie będziesz mieć żadnych problemów. Wygląda na to, że twoje bazy danych stały się bardziej aktywne i zjadły więcej twoich wątków. To jest długie i krótkie.

rev użytkownik126897
źródło