MSSQLSERVER_17883

Aplica-se a:SQL Server

Detalhes

Atributo Valor
Nome do Produto SQL Server
ID do evento 17883
Origem do Evento MSSQLSERVER
Componente SQLEngine
Nome simbólico SRV_SCHEDULER_NONYIELDING
Texto da mensagem Processo %ld:%ld:%ld (0x%lx) Trabalhador 0x%p parece não estar produzindo no Agendador %ld. Hora de criação do thread: % I64d. Thread aprox. de uso da CPU: kernel %I64d ms, usuário %I64d ms. Utilização do processo %d%%. Sistema inativo %d%%. Intervalo: %I64d ms.

Explicação

Indica que há um possível problema com um thread que não está cedendo em um agendador. Esse erro pode ser causado por uma condição do sistema operacional, um problema de ambiente ou um problema de software em SQL Server ou se SQL Server não estiver recebendo ciclos suficientes para executar. Esse erro poderá desaparecer se o thread eventualmente produzir.

Ação do usuário

Se você examinar as informações da mensagem de erro, verá que certos comportamentos surgem. Por exemplo:

  • Se o tempo do modo de usuário subir rapidamente e continuar a fazê-lo, a causa provável será um loop não associado no mecanismo de SQL Server que não está sendo gerado corretamente.

  • Se o tempo do modo kernel subir rapidamente, o thread passará a maior parte do tempo no sistema operacional e exigirá a depuração de kernel para determinar a causa raiz desse comportamento.

  • Se o tempo do kernel e a hora do usuário não estiverem aumentando rapidamente, o thread provavelmente estará aguardando uma chamada à API, como WaitForSingleObject, SleepWriteFile, ou ReadFile para retornar. Ou o thread pode não estar sendo agendado pelo sistema operacional. As condições de parada de API geralmente exigem a depuração do modo kernel para determinar a causa raiz.

  • Se System Idle % for baixo e Process Utilization % for baixo, SQL Server poderá não estar recebendo ciclos de CPU suficientes. Verifique a utilização da CPU de outros aplicativos no sistema. Além disso, verifique se a paginação está acontecendo no sistema. A execução SELECT * FROM sys.dm_os_ring_buffers também pode fornecer mais detalhes.

  • Se kernel + user os tempos forem baixos, mas Process Utilization % for alto, a condição de erro poderá indicar que threads preemptivos estão consumindo toda a CPU (por exemplo, coleta de lixo).

Combinar informações com a utilização do sistema e o tempo ocioso pode fornecer insights sobre a natureza do problema.

Para entender a lógica de detecção e os motivos comuns que geram essa condição de erro, consulte Como diagnosticar e corrigir erros 17883, 17884, 17887 e 17888.