MSSQL Error 49920: Thread pool starvation detected in database engine
- Ошибка в журнале SQL Server:
Error: 49920, Severity: 16: Thread pool starvation detected in database engine. - Сервер перестает отвечать на новые клиентские подключения.
- Высокое значение ожиданий по типу
THREADPOOLв системных динамических представлениях. - Невозможность подключиться к серверу даже через SSMS (требуется выделенное административное подключение DAC).
1. Подключение через выделенный административный канал (DAC)
Если сервер не принимает стандартные сессии, подключитесь с помощью утилиты sqlcmd через DAC:
sqlcmd -S admin:127.0.0.1 -d master2. Анализ очередей планировщиков (Schedulers)
SELECT
scheduler_id,
cpu_id,
current_tasks_count,
runnable_tasks_count,
current_workers_count,
active_workers_count,
work_queue_count
FROM sys.dm_os_schedulers
WHERE status = 'VISIBLE ONLINE';Если work_queue_count > 0, задачи стоят в очереди из-за отсутствия свободных воркеров.
3. Выявление запросов, порождающих параллельные потоки
SELECT
r.session_id,
r.status,
r.blocking_session_id,
r.wait_type,
r.wait_time,
t.text
FROM sys.dm_exec_requests r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t
WHERE r.wait_type = 'THREADPOOL' OR r.blocking_session_id <> 0;4. Корректировка MAXDOP и порога параллелизма (CTFP)
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
-- Установка Cost Threshold for Parallelism (рекомендуется от 50 для 1С)
EXEC sp_configure 'cost threshold for parallelism', 50;
-- Ограничение максимальной степени параллелизма
EXEC sp_configure 'max degree of parallelism', 4;
RECONFIGURE; Частые вопросы (FAQ)
Что вызывает Thread Pool Starvation в SQL Server?
Голодание пула потоков вызывается лавинообразным ростом запросов с высоким параллелизмом (CXPACKET), массовыми блокировками (дедлоками) или нехваткой пула max worker threads.
Как рассчитать оптимальное количество Max Worker Threads?
Для 64-битных систем: 512 + ((Количество логических ядер - 4) * 16) при ядрах > 4. Ручное увеличение параметра требуется крайне редко.
Почему блокировки транзакций приводят к ожиданиям THREADPOOL?
Каждый заблокированный запрос удерживает рабочий поток. При сотнях ожидающих сессий весь пул потоков исчерпывается, блокируя даже простые новые запросы.
Как активировать Dedicated Administrator Connection (DAC) удаленно?
Выполните: EXEC sp_configure 'remote admin connections', 1; RECONFIGURE; для разрешения подключений с удаленных рабочих мест.