Ontem recebi uma ligação de um cliente que estava reclamando sobre o alto uso da CPU no SQL Server. Estamos usando o SQL Server 2012 de 64 bits SE. O servidor está executando o Windows Server 2008 R2 Standard, Intel Xeon de 2,20 GHz (4 núcleos), 16 GB de RAM.
Depois de me certificar de que o culpado era de fato o SQL Server, observei as principais esperas da instância usando a consulta DMV aqui . As duas principais esperas foram: (1) PREEMPTIVE_OS_DELETESECURITYCONTEXT
e (2) SOS_SCHEDULER_YIELD
.
Edição : Aqui está o resultado da "consulta superior aguarda" (embora alguém tenha reiniciado o servidor esta manhã contra a minha vontade):
Fazemos muitos cálculos / conversões intensas, para que eu possa entender SOS_SCHEDULER_YIELD
. No entanto, estou muito curioso sobre o PREEMPTIVE_OS_DELETESECURITYCONTEXT
tipo de espera e por que ele pode ser o mais alto.
A melhor descrição / discussão que posso encontrar sobre esse tipo de espera pode ser encontrada aqui . Menciona:
Os tipos de espera PREEMPTIVE_OS_ são chamadas que deixaram o mecanismo de banco de dados, normalmente para uma API Win32, e executam código fora do SQL Server para várias tarefas. Nesse caso, ele está excluindo um contexto de segurança usado anteriormente para acesso remoto a recursos. A API relacionada é na verdade chamada DeleteSecurityContext ()
Que eu saiba, não temos recursos externos, como servidores vinculados ou tabelas de arquivos. E não fazemos representação etc. O backup pode ter causado um pico ou talvez um controlador de domínio com defeito?
O que diabos poderia fazer com que este seja o tipo de espera dominante? Como posso acompanhar ainda mais esse tipo de espera?
Edição 2: verifiquei o conteúdo do log de segurança do Windows. Vejo algumas entradas que podem ser interessantes, mas não tenho certeza se são normais:
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
Editar 3 : @Jon Seigel, conforme solicitado, eis os resultados da sua consulta. Um pouco diferente do de Paulo:
Edição 4: Admito que sou o primeiro usuário de Eventos Estendidos. Adicionei esse tipo de espera ao evento wait_info_external e vi centenas de entradas. Não há texto sql ou identificador de plano, apenas uma pilha de chamadas. Como posso rastrear ainda mais a fonte?