Несколько месяцев назад я столкнулся с подобной ситуацией, когда настройка MAXDOP была по умолчанию, а запрос на запуск исчерпал все рабочие потоки.
Как отметил Ремус, это называется голодом с рабочим потоком .
При возникновении этого условия на вашем сервере будет создан дамп памяти.
Если вы используете 2008R2 + SP1 и выше sys.dm_server_memory_dumps
, вам также будет указано расположение файла дампа.
Теперь вернемся к проблеме:
Для каждого узла NUMA имеется 1 поток монитора планировщика, и, поскольку у вас 2 узла NUMA, будет 2 потока монитора планировщика, которые отвечают за проверку работоспособности всех планировщиков каждые 60 секунд для этого конкретного узла NUMA, обеспечивая при этом, что планировщик застрял или не.
Каждый раз, когда новый рабочий запрос извлекается из рабочей очереди планировщиков, счетчик рабочих процессов увеличивается. Таким образом, если планировщик поставил рабочий запрос в очередь и не обработал один из рабочих запросов в течение 60 секунд, планировщик считается застрявшим.
Из-за запроса на запуск или обширного параллелизма возникает условие, что рабочие потоки начинают исчерпываться, поскольку все потоки заняты этим единственным запросом на запуск или чрезмерной длительной блокировкой, и никакая работа не может быть выполнена, если этот нарушающий процесс не будет уничтожен.
Лучше всего сначала настроить максимальную степень параллелизма . Значение по умолчанию 0
означает, что SQL Server может использовать все доступные процессоры для параллельной обработки и исчерпать все рабочие потоки.
Есть много причин, которые могут привести к исчерпанию рабочих потоков:
- Обширные длинные блокирующие цепочки, приводящие к тому, что в SQL Server заканчиваются рабочие потоки
- Обширный параллелизм также ведет к исчерпанию рабочих потоков
- Обширное ожидание любого типа «замков» - спин-замков, защелок. Сиротский спинлок является примером.
Обратитесь к моему ответу здесь , который покажет вам, как вы можете рассчитать значение MAXDOP для вашего экземпляра сервера.
Кроме того, настоятельно рекомендуем вам начать сбор статистических данных об экземпляре сервера базы данных.
max degree of parallelism
настроенного и сколько процессоров у вас в настоящее время на сервере вместе с конфигурацией NUMA? Вы можете использоватьcoreinfo.exe
от Sysinternals , чтобы узнать количество процессоров и конфигурации NUMA.