MSSQL Error 17884: New queries assigned to process have not been picked up — Решение
- Сообщение в Errorlog:
New queries assigned to process on Node X have not been picked up by a worker thread in Y seconds. Blocking or long-running queries can contribute to this condition. - Пользователи 1С получают таймауты подключения: «Время ожидания выполнения операции истекло».
- Счетчик
sys.dm_os_schedulers.work_queue_countпостоянно растет. - Процессор может быть не загружен на 100%, но новые транзакции не стартуют.
1. Проверка исчерпания пула потоков (Thread Pool Exhaustion)
-- Проверка лимита и текущего количества используемых воркеров
SELECT
max_workers_count,
(SELECT COUNT(*) FROM sys.dm_os_workers) AS current_workers_count,
(SELECT SUM(work_queue_count) FROM sys.dm_os_schedulers) AS total_queued_tasks
FROM sys.dm_os_sys_info;2. Анализ ожиданий THREADPOOL и блокирующих цепочек
-- Проверка ожиданий выделения рабочего потока
SELECT
wait_type,
waiting_tasks_count,
wait_time_ms,
signal_wait_time_ms
FROM sys.dm_os_wait_stats
WHERE wait_type IN ('THREADPOOL', 'SOS_SCHEDULER_YIELD', 'RESOURCE_SEMAPHORE');3. Поиск корневого блокирующего запроса (Head Blocker)
SELECT
tl.resource_type,
tl.resource_database_id,
tl.request_session_id,
wt.blocking_session_id,
er.command,
er.cpu_time,
er.total_elapsed_time,
st.text AS blocker_query
FROM sys.dm_tran_locks tl
JOIN sys.dm_os_waiting_tasks wt ON tl.lock_owner_address = wt.resource_address
JOIN sys.dm_exec_requests er ON wt.blocking_session_id = er.session_id
CROSS APPLY sys.dm_exec_sql_text(er.sql_handle) st
WHERE wt.blocking_session_id IS NOT NULL AND wt.blocking_session_id != wt.session_id;4. Корректировка max worker threads и архитектуры пула 1С
Не рекомендуется бездумно завышать max worker threads. Оптимизируйте пул соединений на стороне кластера серверов 1С (параметр «Лимит количества соединений на рабочий процесс» в консоли администрирования 1С).
Частые вопросы (FAQ)
Почему увеличение 'max worker threads' часто усугубляет проблему?
Увеличение количества потоков при наличии корневой блокировки или нехватки ресурсов приводит к росту накладных расходов на контекстное переключение (context switching) и деградации памяти ядра под стеки потоков (2 MB на поток).
Как тип подключения 1С:Предприятие влияет на ошибку 17884?
Нерегламентированные запросы пользователей или зависшие фоновые задания 1С удерживают соединения открытыми, исчерпывая лимиты пула воркеров SQLOS.
Что означает параметр 'Node X' в тексте ошибки?
Это номер аппаратного NUMA-узла процессора. Если ошибка возникает только на определенной ноде, это может указывать на неравномерное распределение нагрузки или сбой локальной памяти NUMA.
Как экстренно подключиться к серверу для диагностики при THREADPOOL?
Используйте выделенное административное подключение (DAC — Dedicated Administrator Connection) через sqlcmd -A или Management Studio с префиксом ADMIN:ServerName.