J'ai reçu un appel hier d'un client qui se plaignait de l'utilisation élevée du processeur sur son serveur SQL. Nous utilisons SQL Server 2012 64 bits SE. Server exécute Windows Server 2008 R2 Standard, 2,20 GHz Intel Xeon (4 cœurs), 16 Go de RAM.
Après avoir assuré que le coupable était en fait SQL Server, j'ai examiné le sommet des attentes pour l'instance à l'aide de la requête DMV ici . Les deux premières attentes étaient les suivantes: (1) PREEMPTIVE_OS_DELETESECURITYCONTEXT
et (2) SOS_SCHEDULER_YIELD
.
[~ # ~] éditer [~ # ~] : Voici le résultat de la "Quary Top Waits" (bien que quelqu'un redémarre le serveur ce matin contre mes souhaits):
Nous faisons beaucoup de calculs/de conversion intenses afin que je puisse comprendre SOS_SCHEDULER_YIELD
. Cependant, je suis très curieux de savoir le PREEMPTIVE_OS_DELETESECURITYCONTEXT
Type d'attente et pourquoi cela pourrait être le plus élevé.
La meilleure description/discussion que je peux trouver sur ce type d'attente peut être trouvée ici . Il mentionne:
Les types d'attente Preemptive_OS_ sont des appels qui ont laissé le moteur de base de données, généralement à une API Win32 et effectuent un code en dehors de SQL Server pour diverses tâches. Dans ce cas, il supprime un contexte de sécurité précédemment utilisé pour l'accès des ressources à distance. L'API connexe est en fait nommée deletesecurityContext ()
À mes connaissances, nous n'avons aucune ressource externe comme des serveurs ou des files liés. Et nous ne faisons aucune impersonnation, etc. Une sauvegarde pourrait-elle avoir causé ceci à Spike ou peut-être un contrôleur de domaine défectueux?
Qu'est-ce que le diable pourrait causer que cela soit le type d'attente dominant? Comment puis-je suivre ce type d'attente plus loin?
Edit 2: J'ai vérifié le contenu du journal de sécurité Windows. Je vois quelques entrées qui peuvent être d'intérêt, mais je ne sais pas si ce sont normaux:
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
Edit 3 : @jon Seigel, comme vous l'avez demandé, voici les résultats de votre requête. Un peu différent de Paul:
Edit 4: J'admets, je suis un premier utilisateur d'événements prolongé. J'ai ajouté ce type d'attente à l'événement wait_info_external et j'ai vu des centaines d'entrées. Il n'y a pas de texte SQL ou de plan de plan, seule une pile d'appel. Comment puis-je suivre davantage la source?
Le SecurityContext est utilisé par le serveur SQL à plusieurs endroits. Un exemple que vous avez nommé sont les serveurs et les militants liés. Peut-être que vous utilisez cmdexec? Emplois SQL Server Agent avec des comptes proxy? Appeler un service Web? Les ressources distantes peuvent être beaucoup de choses drôles.
Les événements d'impersonnation peuvent être connectés à l'événement Security Windows. Cela pourrait être que vous trouvez une indice là-bas. De plus, vous voudrez peut-être vérifier l'enregistreur Blackbox AKA Événements étendus.
Avez-vous vérifié si ces types d'attente sont nouveaux (et en relation avec le processeur élevé) ou juste normal pour votre serveur?