Ayer recibí una llamada de un cliente que se quejaba del uso elevado de la CPU en su SQL Server. Estamos utilizando SQL Server 2012 64 bit SE. El servidor ejecuta Windows Server 2008 R2 Standard, 2.20 GHz Intel Xeon (4 núcleos), 16 GB de RAM.
Después de asegurarme de que el culpable era de hecho SQL Server, eché un vistazo a las esperas superiores para la instancia usando la consulta DMV aquí . Las dos esperas principales fueron: (1) PREEMPTIVE_OS_DELETESECURITYCONTEXT
y (2) SOS_SCHEDULER_YIELD
.
EDITAR : Aquí están los resultados de la "consulta de espera superior" (aunque alguien reinició el servidor esta mañana en contra de mis deseos):
Hacemos muchos cálculos / conversiones intensas, así que puedo entender SOS_SCHEDULER_YIELD
. Sin embargo, tengo mucha curiosidad sobre el PREEMPTIVE_OS_DELETESECURITYCONTEXT
tipo de espera y por qué podría ser el más alto.
La mejor descripción / discusión que puedo encontrar sobre este tipo de espera se puede encontrar aquí . Menciona:
Los tipos de espera PREEMPTIVE_OS_ son llamadas que abandonaron el motor de la base de datos, generalmente a una API Win32, y realizan código fuera de SQL Server para diversas tareas. En este caso, está eliminando un contexto de seguridad utilizado anteriormente para el acceso a recursos remotos. La API relacionada en realidad se llama DeleteSecurityContext ()
Que yo sepa, no tenemos recursos externos como servidores vinculados o tablas de archivos. Y no hacemos ninguna suplantación, etc. ¿Podría una copia de seguridad haber causado que esto aumentara o tal vez un controlador de dominio defectuoso?
¿Qué diablos podría hacer que este sea el tipo de espera dominante? ¿Cómo puedo seguir este tipo de espera?
Edición 2: Revisé el contenido del Registro de seguridad de Windows. Veo algunas entradas que pueden ser de interés, pero no estoy seguro de si son normales:
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
Edición 3 : @Jon Seigel, como solicitó, aquí están los resultados de su consulta. Un poco diferente al de Paul:
Edición 4: Lo admito, soy el primer usuario de Extended Events. Agregué este tipo de espera al evento wait_info_external y vi cientos de entradas. No hay texto sql o identificador de plan, solo una pila de llamadas. ¿Cómo puedo seguir rastreando la fuente?