Ieri ho ricevuto una chiamata da un cliente che si lamentava dell'elevato utilizzo della CPU sul proprio SQL Server. Stiamo utilizzando SQL Server 2012 64 bit SE. Il server esegue Windows Server 2008 R2 Standard, Intel Xeon a 2,20 GHz (4 core), 16 GB di RAM.
Dopo essermi accertato che il colpevole fosse proprio SQL Server, ho dato un'occhiata alle prime attese per l'istanza utilizzando la query DMV qui . Le prime due attese erano: (1) PREEMPTIVE_OS_DELETESECURITYCONTEXT
e (2) SOS_SCHEDULER_YIELD
.
EDIT : Ecco il risultato della "query top waitits" (anche se qualcuno ha riavviato il server questa mattina contro i miei desideri):
Facciamo molti calcoli / conversioni intense, quindi posso capire SOS_SCHEDULER_YIELD
. Tuttavia, sono molto curioso del PREEMPTIVE_OS_DELETESECURITYCONTEXT
tipo di attesa e del perché potrebbe essere il più alto.
La migliore descrizione / discussione che posso trovare su questo tipo di attesa può essere trovata qui . Menziona:
I tipi di attesa PREEMPTIVE_OS_ sono chiamate che hanno lasciato il motore di database, in genere a un'API Win32, e eseguono codice all'esterno di SQL Server per varie attività. In questo caso, sta eliminando un contesto di sicurezza precedentemente utilizzato per l'accesso remoto alle risorse. L'API correlata è in realtà denominata DeleteSecurityContext ()
Per quanto ne so, non abbiamo risorse esterne come server collegati o filetable. E non facciamo alcuna imitazione, ecc. Un backup potrebbe aver causato un picco o forse un controller di dominio difettoso?
Che diamine potrebbe causare questo tipo di attesa dominante? Come posso monitorare ulteriormente questo tipo di attesa?
Modifica 2: ho controllato il contenuto del registro di sicurezza di Windows. Vedo alcune voci che potrebbero essere di interesse, ma non sono sicuro che siano normali:
Special privileges assigned to new logon.
Subject:
Security ID: NT SERVICE\MSSQLServerOLAPService
Account Name: MSSQLServerOLAPService
Account Domain: NT Service
Logon ID: 0x3143c
Privileges: SeImpersonatePrivilege
Special privileges assigned to new logon.
Subject:
Security ID: NT SERVICE\MSSQLSERVER
Account Name: MSSQLSERVER
Account Domain: NT Service
Logon ID: 0x2f872
Privileges: SeAssignPrimaryTokenPrivilege
SeImpersonatePrivilege
Modifica 3 : @Jon Seigel, come richiesto, ecco i risultati della tua query. Un po 'diverso da quello di Paul:
Modifica 4: lo ammetto, sono un utente di Extended Events per la prima volta. Ho aggiunto questo tipo di attesa all'evento wait_info_external e ho visto centinaia di voci. Non c'è testo sql o handle di piano, solo uno stack di chiamate. Come posso rintracciare ulteriormente la fonte?