Como soluciono problemas de alto uso de CPU na instância do RDS para SQL Server?

Última atualização: 2022-10-04

Estou observando alto uso de CPU em instâncias de banco de dados do Amazon Relational Database Service (Amazon RDS) para Microsoft SQL Server. Como posso solucionar problemas e resolver o alto uso de CPU?

Breve descrição

Os motivos comuns de aumento no uso de CPU são os seguintes:

  • Workloads iniciadas pelo usuário pesadas, várias consultas simultâneas ou transações de longa duração
  • Uso de uma classe de instância subprovisionada para a workload
  • Estatísticas desatualizadas e fragmentação ou ausência de índices
  • Consultas com escopo para aprimoramento
  • Bloqueio e impasses
  • Paralelismo
  • Compilação e recompilação frequente
  • Detecção de parâmetros
  • Exaustão de thread

Para identificar a origem do uso de CPU na instância do Amazon RDS para SQL Server, use as seguintes ferramentas:

  • Métricas do Amazon CloudWatch para o Amazon RDS
  • Monitoramente avançado
  • Insights de performance
  • Ferramentas nativas do SQL Server

Depois de identificar a origem, você pode analisar e otimizar a workload para reduzir o uso de CPU.

Resolução

Métricas do Amazon CloudWatch para o Amazon RDS

Você pode usar as métricas do CloudWatch para identificar padrões de CPU por longos períodos. Compare os gráficos para WriteIOPS, ReadIOPS, ReadThroughput e WriteThroughput, juntamente com o uso de CPU, para descobrir em que momentos a workload causou um alto uso de CPU. Para obter mais informações, consulte Mmétricas do Amazon CloudWatch para o Amazon RDS.

Se você estiver usando uma instância da classe de instâncias t2 ou t3, verifique se ela está subprovisionada. Se você observa uma diminuição consistente no saldo de créditos de CPU e um aumento consistente no uso de créditos de CPU, os núcleos de CPU não são suficientes para a workload.

Depois de identificar o período de tempo, você pode revisar os dados de Monitoramento avançado associados à instância de banco de dados. Você pode configurar o Monitoramento avançado para coletar dados a intervalos de 1, 5, 10, 15, 30 ou 60 segundos. Isso permite coletar dados em um nível mais granular do que o CloudWatch.

Monitoramente avançado

Se você configurou o Monitoramento avançado, pode usá-lo para monitorar o sistema operacional em execução na instância de banco de dados. Para verificar o uso de CPU usando o Monitoramento avançado, faça o seguinte:

  1. No console do RDS, selecione Databases (Bancos de dados) e escolha seu banco de dados.
  2. Na guia Monitoring (Monitoramento), selecione OS process list (Lista de processos do sistema operacional) no menu suspenso Monitoring (Monitoramento). Verifique se o alto nível de CPU é causado pelo sistema operacional, por um processo do RDS, um processo do SQL Server ou um processo do SQL Agent. Você também pode verificar a porcentagem de CPU e de memória usada por esses processos.
  3. Selecione métricas na lista suspensa Enhanced monitoring (Monitoramento aprimorado) para verificar os dados do monitor de performance. Essas métricas incluem CPU ociosa, Kernel e Usuário. Essas métricas indicam se a CPU está passando a maior parte do tempo ociosa, executando o kernel ou executando processos do usuário.
  4. Veja outras métricas selecionando Manage Graphs (Gerenciar gráficos). Depois você pode selecionar métricas relacionadas a E/S e throughput de disco. Essas métricas incluem Leitura/s, Gravação/s, KB/s de leitura e KB/s de gravação. Você também pode visualizar os parâmetros relacionados à memória, incluindo Memória Disponível, Memória do SQL Server e Memória Total. Essas métricas são úteis porque, se a CPU estiver gastando muito tempo esperando recursos, é possível que você experiemente um alto uso de CPU.

Para obter mais informações, consulte Visualizar métricas do sistema operacional no console do RDS.

    Insights de performance

    Você pode usar Insights de Performance do Amazon RDS para identificar as consultas responsáveis pela carga do banco de dados. Para fazer isso,

    1. Maque a SQL tab (Guia do SQL) que corresponde ao período de tempo que você deseja analisar.
    2. Identifique a consulta que está demorando mais.
    3. Verifique a consulta intensiva de recursos e os eventos de espera observados durante esse período. Os eventos de espera frequentemente associados a alto uso de CPU são os seguintes:
      SOS_SCHEDULER_YIELD: essa espera indica que um trabalhador cedeu sua vez de executar a outra pessoa. Contagens altas de espera com tempos de espera baixos geralmente indicam consultas vinculadas à CPU. Os altos tempos de espera aqui podem ser causados por problemas d concessão de preferêcia. Se você observar um longo tempo de espera aqui, revise mais detalhadamente a workload.
      Se SOS_SCHEDULER_YIELD for o tipo de espera predominante, isso pode indicar que a pressão de CPU é o problema. Analise o tipo de workload e faça ajustes adicionais.
      CXPACKET e CXCONSUMER: eventos de espera relacionados a paralelismo geralmente não são uma preocupação. Mas, se os eventos de espera forem frequentes e afetarem a performance, revise as consultas e defina valores adequados para o limite de custos de paralelismo. Certifique-se de que o SQL Server esteja escolhendo o parâmetro de paralelismo de menor custo do grupo de parâmetros.
      Você também pode aumentar MAXDOP (grau máximo de paralelismo) para 1 no nível da consulta ou da instância, dependendo do caso de uso.
      ThreadPool: esse evento de espera indica o esgotamento do thread. Se a classe de instância permitir, aumente o parâmetro max worker threads. As esperas de ThreadPool podem ocorrer devido a uso excessivo de threads. Threads excessivos são usados devido a bloqueio, alta workload ou grande quantidade de consultas paralelas. Ou essa espera pode ser causada por uma configuração incorreta do parâmetro max worker threads.
    4. Verifique as Database Metrics (Métricas do banco de dados) para solicitações em lote, compilações de SQL e recompilações de SQL. Verifique se as consultas estão sendo compiladas várias vezes, indicando consultas improvisadas. Verifique também se as consultas são recompiladas com frequência para um determinado lote, indicando o uso de with recompile no código da consulta. Ambos causam alto uso de CPU.

    Ferramentas nativas do SQL Server

    Consultas específicas para solução de problemas de CPU: Para obter mais informações, consulte Solucionar problemas de alto uso de CPU no SQL Server no site de documentação da Microsoft. Concentre-se nas consultas sobre uso intensivo de CPU, estatísticas de atualização, índices ausentes e detecção de parâmetros.

    Verifique o plano de execução de consultas de baixa performance e faça ajustes adicionais. Para obter mais informações, consulte Exibir um plano de execução real no site de documentação da Microsoft.

    Solucione problemas de excesso de travamento, bloqueio e impasse usando consultas e Eventos Estendidos. Para obter mais informações, consulte Compreender e resolver problemas de bloqueio do SQL Server no site de documentação da Microsoft.

    Observação: você não pode usar o método normal para salvar arquivos XEL ao configurar Eventos Estendidos no RDS para SQL Server. Para obter instruções sobre como configurar eventos estendidos, consulte Configurar Eventos Estendidos no Amazon RDS para SQL Server.

    Use os relatórios do SQL Server para obter os relatórios de performance disponíveis nativamente no SQL Server. Use esses relatórios para ajustar a workload. Para obter mais informações, consulte Painel de desempenho no site de documentação da Microsoft.


    Este artigo foi útil?


    Precisa de ajuda com faturamento ou suporte técnico?