Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

MSSQL_49920 1С:Предприятие и СУБД

MSSQL Error 49920: Thread pool starvation detected in database engine

Обновлено: 25.08.2026 · Официальная документация ↗
  • Ошибка в журнале 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 master

2. Анализ очередей планировщиков (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;
💡 Практика специалистов: Для систем 1С:Предприятие критически важно не оставлять параметр MAXDOP = 0 (по умолчанию). Устанавливайте MAXDOP равным количеству физических ядер на один NUMA-узел (обычно от 2 до 8).

Частые вопросы (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; для разрешения подключений с удаленных рабочих мест.

Полезные материалы
Рекомендуем