Недавно у нас была проблема в нашей среде SQL Server 2014 HADR, где на одном из серверов закончились рабочие потоки.
Мы получили сообщение:
Пулу потоков для групп доступности AlwaysOn не удалось запустить новый рабочий поток, так как недостаточно доступных рабочих потоков.
Я уже открыл другой вопрос, чтобы получить утверждение, которое (я думал) должно помочь мне проанализировать проблему ( Можно ли увидеть, какой SPID использует какой планировщик (рабочий поток)? ). Хотя сейчас у меня есть запрос, чтобы найти потоки, которые используют систему, я не понимаю, почему на этом сервере закончились рабочие потоки.
Наша среда выглядит следующим образом:
- 4 Windows Server 2012 R2
- SQL Server 2014 Enterprise
- 24 процессора -> 832 рабочих потоков
- 256 ГБ оперативной памяти
- 12 групп доступности (всего)
- 642 базы данных (всего)
Итак, сервер, на котором возникла проблема, имел следующую конфигурацию:
- 5 групп доступности (3 основных / 2 дополнительных)
- 325 баз данных (127 первичных / 198 вторичных)
MAXDOP = 8
Cost Threshold for Parallelism = 50
- План электропитания установлен на «Высокая производительность»
Чтобы «решить» проблему, мы вручную перевели одну группу доступности на вторичный сервер. Конфигурация этого сервера теперь:
- 5 групп доступности (2 основных / 3 дополнительных)
- 325 баз данных (77 первичных / 248 вторичных)
Я отслеживаю доступные темы с этим заявлением:
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'
Обычно на сервере доступно около 250-430 рабочих потоков, но на момент возникновения проблемы рабочих не осталось.
Сегодня из ниоткуда количество рабочих сократилось с 327 до 50, но только на минуту, а затем снова поднялось до 400.
Я уже видел другой вопрос (использование HADR с высоким рабочим потоком ), но он мне не помогает.
Наша система работала стабильно более года без проблем. У нас не было сбоев или других серьезных изменений в распределении баз данных.
Мы используем «Синхронный коммит» между репликами. Насколько я понимаю, сжатие не задействовано, см. Раздел «Настройка сжатия для группы доступности» в документации.
Кто-нибудь имеет представление о том, что использует все рабочие потоки?
РЕДАКТИРОВАТЬ: нашел эту страницу, где есть много информации именно об этих проблемах http://www.techdevops.com/Article.aspx?CID=24