Hace unos meses, me enfrenté a una situación similar en la que la configuración MAXDOP era predeterminada y una consulta de escape agotó todos los hilos de trabajo.
Como Remus señaló, esto se llama hambruna de hilos de trabajo .
Habrá un volcado de memoria creado en su servidor cuando se produjo esta condición.
Si está en 2008R2 + SP1 y en adelante, también sys.dm_server_memory_dumps
le dará la ubicación del archivo de volcado.
Ahora volviendo al problema:
Hay 1 subproceso de monitor de planificador por nodo NUMA y dado que tiene 2 nodos NUMA, habrá 2 subprocesos de monitor de planificador que son responsables de la comprobación del estado de todos los planificadores cada 60 segundos para ese nodo NUMA en particular mientras se asegura de que el planificador esté atascado o no.
Cada vez que se extrae una nueva solicitud de trabajo de la cola de trabajo del planificador, el contador de procesos de trabajo se incrementa. Entonces, si el planificador tiene una solicitud de trabajo en cola y no ha procesado una de las solicitudes de trabajo en 60 segundos, el planificador se considera bloqueado.
Debido a una consulta de fuga o un paralelismo extenso, surge la condición de que los subprocesos de trabajo comiencen a agotarse, ya que todos los subprocesos están ocupados por esa única consulta de huida o bloqueo prolongado excesivo y no se puede realizar ningún trabajo a menos que se elimine ese proceso ofensivo.
Su mejor opción es sintonizar primero su configuración de Grado máximo de paralelismo . El valor predeterminado de 0
significa que SQL Server puede usar todas las CPU disponibles para el procesamiento paralelo y agotar todos los subprocesos de trabajo.
Hay muchas razones que pueden llevar al agotamiento de los hilos de trabajo:
- Extensas cadenas de bloqueo largas que hacen que SQL Server se quede sin hilos de trabajo
- Amplio paralelismo que también lleva al agotamiento de los hilos de trabajo
- Espera extensa para cualquier tipo de "cerradura": cerraduras giratorias, pestillos. Un spinlock huérfano es un ejemplo.
Consulte mi respuesta aquí que le mostrará cómo puede calcular el valor MAXDOP para su instancia de servidor.
Además, le recomiendo que comience a recopilar información de estadísticas de espera sobre la instancia del servidor de su base de datos.
max degree of parallelism
configurado y cuántos procesadores tiene actualmente en el servidor junto con la configuración de NUMA? Puede usarcoreinfo.exe
desde sysinternals para averiguar la cantidad de procesadores y la configuración de NUMA.