Atualmente, usamos uma ferramenta de monitoramento que nos mostra nossas principais estatísticas de espera por número de tarefas em espera ou tempo total de espera. Abaixo estão as estatísticas de espera por número de tarefas em espera e também o tempo de espera por tarefa.
Temos usuários reclamando de lentidão no sistema, mas as métricas do servidor parecem boas em termos de E/S de disco, memória e CPU. Alguém sabe se as esperas PREEMPTIVE são um problema?
Number of waiting tasks
SOS_SCHEDULER_YIELD
PAGELATCH_EX
PAGELATCH_SH
PREEMPTIVE_XE_CALLBACKEXECUTE
PREEMPTIVE_XE_GETTARGETSTATE
PREEMPTIVE_XE_SESSIONCOMMIT
Average wait per task
PAGEIOLATCH_SH
PREEMPTIVE_XE_GETTARGETSTATE
Atualização:
executei uma consulta de Paul Randal semelhante à que você postou e obtive o seguinte:
WaitType Wait_S Resource_S Signal_S WaitCount Percentage AvgWait_S AvgRes_S AvgSig_S
PREEMPTIVE_XE_GETTARGETSTATE 9704.81 9704.81 0.00 604647 44.60 0.0161 0.0161 0.0000
Eu sei que isso não combina muito bem, mas basicamente esse tipo de espera foi responsável por 44,60% de todos os tipos de espera. Além disso, como não houve esperas de sinal neste tipo, isso indica que não há pressão da CPU, mas sim uma espera em algum outro recurso. No entanto, não tenho certeza de como deduzo o que é esse recurso.
Também este é o SQL 2012 SP1
Update2 AS solicitado aqui são os resultados de sua consulta. Em relação aos eventos estendidos, as únicas sessões em execução são o padrão system_health e 2 do SharePoint que acabei de notar, eles devem ter sido colocados lá por padrão. Posso desligá-los. Será que eles estão causando algum problema?
É interessante que meu PREEMPTIVE_XE_GETTARGETSTATE não pareça estar nesta lista.
wait_type wait_time_ms signal_wait_time_ms resource_wait_time_ms percent_total_waits percent_total_signal_waits percent_total_resource_waits
SP_SERVER_DIAGNOSTICS_SLEEP 300014 355508314 0 24.621089361251698 99.883069863550302 0.000000000000000
MSQL_XP 96782 0 4268999 0.295653861591811 0.000000000000000 0.295653861591811
ASYNC_IO_COMPLETION 56193 64 345552 0.023935987107964 0.000017981341700 0.023931554722962
BACKUPTHREAD 41100 6850 265025 0.018828979257262 0.001924565478840 0.018354575549998
LCK_M_U 40500 71 41030 0.002846491499596 0.000019948050948 0.002841574322484
PWAIT_ALL_COMPONENTS_INITIALIZED 31422 0 94205 0.006524262955146 0.000000000000000 0.006524262955146
XE_LIVE_TARGET_TVF 28050 0 33458 0.002317167771915 0.000000000000000 0.002317167771915
LCK_M_X 4027 50 29195 0.002025392177944 0.000014047923203 0.002021929377161
SQLTRACE_INCREMENTAL_FLUSH_SLEEP 4018 613 355390660 24.612983567922965 0.000172227538471 24.612941113985366
CXPACKET 3756 1 14755 0.001021941767062 0.000000280958464 0.001021872511047
Os
preemptive_xe_*
tipos de espera estão associados a eventos estendidos pelo que entendi e posso encontrar. Considerando isso e sua primeira frase:Eu começaria a olhar para suas ferramentas de monitoramento como o culpado. No entanto, como seus dados do script de Paul mostram que a média de espera é baixa, eu não me preocuparia muito com isso agora.
Seu principal desafio aqui, que eu acho que você pode estar ignorando, é que seu usuário disse que houve uma lentidão no sistema/aplicativo. A maioria sempre apontará para o banco de dados/servidor como o culpado. Minha próxima pergunta geral quando alguém me diz que é "qual parte do sistema é lenta". Se eles me disserem coisas como páginas carregando lentamente e não estiverem realmente executando nenhum relatório ou consulta ad hoc, peço que verifiquem com o pessoal do servidor ou administradores de aplicativos para garantir que nada mais esteja errado. Então, enquanto eles estiverem fazendo isso, irei verificar o desempenho do servidor de banco de dados. No entanto, como você mostrou, se o tipo de espera XE for o único acima de 10%, não acho que o problema esteja no servidor de banco de dados.
Se você deseja encontrar o culpado desse tipo de espera, pode começar a consultar
sys.dm_os_waitting_tasks
, isso mostrará asession_id
espera que está ocorrendo. Você também pode usar sp_WhoIsActive para obter informações semelhantes com um pouco mais de facilidade. Aposto que você descobrirá que são sessões associadas à sua ferramenta de monitoramento.PreEmptive_XXX
tipos de espera são aqueles que são:Então, essencialmente, o SQL Server está aguardando a conclusão dos processos externos antes de poder continuar com seu próprio processamento.
Pode ser causado pelo uso de CLR ou procedimentos armazenados estendidos; portanto, se você tiver algum deles, começarei procurando lá.
O SQL Server funciona no modo não preemtivo, o que significa que, se o SQLOS solicitar que ele ceda porque recebeu uma solicitação do sistema operacional Windows, ele solicitará que o SQL server ceda e o SQL Server o ouvirá e cederá ou fará o que o SQLOS solicitou . Isso ocorre porque o SQL Server é executado como um aplicativo e recebe recursos alocados pelo SQLOS, que é monitorado pelo Windows O. Os tipos de espera preemptiva ocorrem quando o SQL Server está executando uma tarefa e é interrompido pelo sistema operacional e solicitado a desistir do thread que está usando para que possa ser alocado para outras tarefas e o SQL fará isso. Ele renderá e aguardará até que o encadeamento esteja disponível. Essa espera ocorrerá em esperas PREEMTIVE-XXX.
Qual é a versão do SQL Server aqui está corrigida para o Service Pack mais recente, houve um bug no SQL Server 2008 que aponta o valor incorreto dos tipos de espera preventiva.
Você pode executar sys.dm_exec_requests DMV e ver se o processo que obtém tipos de espera preemtivos está suspenso ou em execução.
Você pode postar a saída da consulta abaixo (por Jonathan Kehayias) para capturar as estatísticas de espera
Quais outros processos estão sendo executados no sistema? O sistema operacional está sob carga? Quantos núcleos de CPU o sistema possui?
EDIT: Depois que o usuário colou a saída
A saída não dá e imagem concreta use minha consulta. Além disso, você está executando rastreamentos de eventos estendidos porque posso ver os tipos de espera XE. Considero esse tipo de espera prejudicial e parece que você não está enfrentando um problema. As ferramentas de monitoramento às vezes exageram , então, com o resultado que você postou, eu pensaria que é um comportamento normal.
EDIT2: Não encontro nenhum problema com a saída de estatísticas de espera que você postou. Também suponho que seu servidor não foi reiniciado recentemente, caso contrário, as estatísticas de espera não serão úteis.