Published on

September 10, 2024

Como Identificar o Alto Uso da CPU no SQL Server

Problema:

Alguém relatou um problema de desempenho em sua aplicação SQL Server. Quando você verifica o servidor de banco de dados, percebe que a utilização da CPU está muito alta e o processo do SQL Server está consumindo a maior parte da CPU. Você abre o SSMS e executa o sp_who2 e percebe que há alguns SPIDs que estão demorando muito para serem concluídos e essas consultas podem estar causando a alta pressão na CPU. No nível do servidor, você só pode ver o processo geral do SQL Server, mas dentro do SQL Server você pode ver cada consulta individual que está sendo executada. Existe uma maneira de saber quanto de CPU cada processo do SQL Server está consumindo? Neste artigo, eu explico como isso pode ser feito.

Solução:

Normalmente, monitoramos esse tipo de problema usando o sp_who2, o Monitor de Atividade ou os DMVs. Se houver muitos processos em execução em sua instância e a CPU estiver muito alta, então é difícil encontrar o processo exato que está consumindo sua CPU usando apenas as ferramentas do SQL Server. Uma maneira de correlacionar os dados entre o que está sendo executado dentro do SQL Server e no nível do Windows é usar os valores SPID e KPID para obter o processo exato.

Antes de discutir como fazer isso, devemos entender esses termos:

  • SPID é o número de ID do processo do SQL Server e é atribuído pelo SQL Server a cada nova conexão. Ele começa com um e é globalmente único. Os SPIDs de 1 a 50 são reservados para uso do sistema e não são usados para nenhuma conexão de usuário.
  • KPID é o ID do processo do kernel. No SQL Server para Windows, esse é o número de ID da thread, também conhecido como “ID da Thread”, e é atribuído pelo Windows quando a thread é criada. O número de ID da thread é um identificador único em todo o sistema que identifica a thread. O KPID é visível consultando a coluna KPID de master..sysprocesses. Ele só é preenchido para números de spid quatro ou superiores. Você também pode obter o KPID/ID da Thread no Windows Perfmon usando o objeto “Thread” e o contador “ID da Thread”.

Passo 1:

Se olharmos o Gerenciador de Tarefas no servidor, podemos ver o uso da CPU. Portanto, o primeiro passo é verificar se o processo do SQL Server (sqlservr), e não algum outro processo, é responsável pelo uso excessivo da CPU. Lembre-se de que o processo “sqlservr” é composto por muitas threads diferentes, cada uma geralmente (mas nem sempre) representando uma conexão de usuário específica.

Passo 2:

Agora precisamos descobrir qual thread do SQL Server está causando o alto uso da CPU. Depois de obtermos esse ID da Thread, podemos correlacionar esse ID da thread (KPID) com o SPID no SQL Server. Vamos usar o Monitor de Desempenho para obter essas informações. Digite perfmon em um prompt de comando do Windows ou inicie-o no Painel de Controle. Clique em Adicionar contadores e selecione o objeto “Thread” no menu suspenso. Selecione esses contadores ao mesmo tempo: % Tempo do Processador, ID da Thread, Estado da Thread, Motivo de Espera da Thread.

Passo 3:

Pressione (Ctrl+R) ou clique na guia Exibir Relatório para mudar de visualização gráfica para visualização de relatório. Aqui você deve ser capaz de encontrar qual ID da Thread está consumindo seus recursos de CPU usando a barra de rolagem para ver todas as instâncias.

Passo 4:

Nosso último passo é correlacionar o ID da Thread (KPID) identificado no último passo com o SPID. Para fazer isso, execute a seguinte consulta no Query Analyzer:

SELECT spid, kpid, dbid, cpu, memusage FROM sysprocesses WHERE kpid=872

Passo 5:

Pela consulta acima, podemos ver que o SPID 71 está causando o problema. Para descobrir quantas threads e transações abertas estão sendo executadas, podemos executar esta consulta:

SELECT spid, kpid, status, cpu, memusage, open_tran, dbid FROM sysprocesses WHERE spid=71

Passo 6:

Para obter a consulta exata que está sendo executada, podemos executar o DBCC INPUTBUFFER usando o SPID. A saída abaixo nos mostra que um trabalho de backup está causando problemas de CPU em nosso servidor.

Ao seguir esses passos, você pode identificar o processo do SQL Server que está causando o alto uso da CPU e tomar as medidas apropriadas para otimizar a consulta ou solucionar o problema.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.