MSSQLSERVER_17883

Si applica a:SQL Server

Dettagli

Attributo Valore
Nome prodotto SQL Server
ID evento 17883
Origine evento MSSQLSERVER
Componente SQLEngine
Nome simbolico SRV_SCHEDULER_NONYIELDING
Testo del messaggio Processo %ld:%ld:%ld (0x%lx) È possibile che il thread di lavoro 0x%p non ceda il controllo all'utilità di pianificazione %ld. Durata creazione thread: %I64d. Utilizzo CPU thread (circa): kernel %I64d ms, utente %I64d ms. Utilizzo processo %d%%. Inattività del sistema: %d%%. Intervallo: %I64d ms.

Spiegazione

Indica che si è verificato un possibile problema con un thread che non restituisce in un'utilità di pianificazione. Questo errore può essere causato da una condizione del sistema operativo, un problema di ambiente o un problema software in SQL Server o se SQL Server non ottiene cicli sufficienti per l'esecuzione. Questo errore può andare via se il thread alla fine restituisce.

Azione utente

Se si esaminano le informazioni sul messaggio di errore, si noterà che emergono determinati comportamenti. Ad esempio:

  • Se il tempo in modalità utente sale rapidamente e continua a farlo, la causa probabile è un ciclo non associato nel motore di SQL Server che non restituisce correttamente.

  • Se il tempo della modalità kernel sale rapidamente, il thread spende la maggior parte del tempo nel sistema operativo e richiede il debug del kernel per determinare la causa radice di questo comportamento.

  • Se il tempo del kernel e il tempo dell'utente non aumentano rapidamente, è probabile che il thread sia in attesa di una chiamata API, ad WaitForSingleObjectesempio , Sleep, WriteFileo ReadFile di restituire. In alternativa, il thread potrebbe non essere pianificato dal sistema operativo. Le condizioni di stallo dell'API richiedono in genere il debug in modalità kernel per determinare la causa radice.

  • Se System Idle % è basso ed Process Utilization % è basso, SQL Server potrebbe non ottenere cicli di CPU sufficienti. Controllare l'utilizzo della CPU di altre applicazioni nel sistema. Controllare anche se il paging è in corso nel sistema. L'esecuzione SELECT * FROM sys.dm_os_ring_buffers può fornire anche altri dettagli.

  • Se kernel + user i tempi sono bassi ma Process Utilization % è elevato, la condizione di errore potrebbe indicare che i thread preemptive utilizzano tutta la CPU( ad esempio, Garbage Collection).

La combinazione di informazioni con l'utilizzo del sistema e il tempo di inattività possono fornire informazioni dettagliate sulla natura del problema.

Per comprendere la logica di rilevamento e i motivi comuni che generano questa condizione di errore, vedere Come diagnosticare e correggere gli errori 17883, 17884, 17887 e 17888.