Ir para o conteúdo

Como soluciono problemas de alta utilização da CPU na minha instância do Amazon RDS para SQL Server?

7 minuto de leitura
0

Estou enfrentando alta utilização da CPU em minhas instâncias de banco de dados do Amazon Relational Database Service (Amazon RDS) para Microsoft SQL Server.

Breve descrição

Os motivos a seguir podem causar aumentos na utilização da CPU:

  • Workloads pesados iniciados pelo usuário, várias consultas simultâneas ou transações de longa duração
  • Uso de uma classe de instância com provisionamento insuficiente para o workload
  • Estatísticas desatualizadas e fragmentação de índices ou índices ausentes
  • Consultas com possibilidade de melhoria
  • Bloqueios e deadlocks
  • Paralelismo
  • Compilação e recompilação frequentes
  • Detecção de parâmetros
  • Exaustão de thread

Para identificar a origem da alta utilização da CPU em sua instância do Amazon RDS para SQL Server, use as seguintes ferramentas:

Depois de identificar a origem, é possível analisar e otimizar seu workload para reduzir a alta utilização da CPU.

Resolução

CloudWatch Metrics para Amazon RDS

Use as seguintes CloudWatch Metrics para o Amazon RDS para identificar padrões de CPU por longos períodos.

Para descobrir os momentos em que o workload aumenta a utilização da CPU, conclua as seguintes etapas:

  1. Abra o console do Amazon RDS.
  2. No painel de navegação, clique em Bancos de dados e selecione a instância de banco de dados que você deseja monitorar.
  3. Clique na guia Monitoramento.
  4. Selecione o menu Monitoramento e, em seguida, clique em CloudWatch.
  5. Pesquise as seguintes CloudWatch Metrics e, em seguida, compare os grafos:
    WriteIOPs
    ReadIOPs
    ReadThroughput
    WriteThroughput
    CPUUtilization
    CPUCreditBalance
    CPUCreditUsage

Observação: se o saldo do crédito da CPU diminuir de forma consistente e o uso do crédito da CPU aumentar de forma consistente, não haverá núcleos de CPU suficientes para o workload. Se você usa uma instância da classe de instância t2 ou t3, verifique se sua instância está subprovisionada.

Depois de identificar o período de tempo, use o Monitoramento aprimorado para analisar os dados associados à sua instância de banco de dados com mais detalhes. É possível configurar o Monitoramento aprimorado para coletar dados em intervalos de 1, 5, 10, 15, 30 ou 60 segundos.

Monitoramento aprimorado

É possível configurar o Monitoramento aprimorado para monitorar o sistema operacional (SO) em execução na sua instância de banco de dados.

Para verificar a utilização da CPU com o Monitoramento aprimorado, conclua as seguintes etapas:

  1. Abra o console do Amazon RDS.
  2. No painel de navegação, clique em Bancos de dados e selecione a instância de banco de dados que você deseja monitorar.
  3. Clique na guia Monitoramento.
  4. Selecione o menu Monitoramento e, em seguida, clique em Lista de processos do SO.

Verifique se os processos do SO, os processos do RDS, os processos do SQL Server ou os processos do SQL Agent estão gerando uma alta utilização da CPU. Também é possível verificar qual porcentagem de CPU e memória esses processos estão utilizando.

Use o console para monitorar as métricas de desempenho. Na guia Monitoramento, clique no menu Monitoramento e, em seguida, selecione Gerenciar grafos.

Para identificar quando a CPU está executando processos do usuário, executando kernels ou está ociosa, selecione os grafos para as métricas Usuário da CPU, Sistema da CPU e CPU Ociosa. Em seguida, selecione as métricas para E/S de disco e E/S de dispositivos físicos. Essas métricas incluem IO/s de leitura, IO/s de gravação, leitura de kB/s e gravação de kB/s. Também é possível visualizar parâmetros relacionados à memória, incluindo memória disponível, memória total do SQL Server e memória total. Essas métricas são úteis porque, se a CPU passar mais tempo esperando por recursos, você poderá enfrentar uma alta utilização da CPU.

Para obter mais informações, consulte Como visualizar métricas do SO no console do RDS.

Database insights

Use o CloudWatch Database Insights para solucionar os problemas dos principais contribuidores da carga do banco de dados e dos processos individuais do SO que estão sendo executados em um grupo de instâncias.

Por padrão, o Modo padrão do Database Insights está ativado para seu banco de dados do Amazon RDS. Para ativar o Modo padrão ao criar ou modificar sua instância de banco de dados, consulte Ativação do modo Standard do Database Insights para Amazon RDS.

Observação: se você não estiver usando permissões mais amplas, certifique-se de conceder as permissões do IAM necessárias para o Database Insights. Para obter mais informações, consulte Conceitos básicos do CloudWatch Database Insights.

Para obter mais informações sobre o Amazon RDS e o suporte a classes de instância, consulte O mecanismo de banco de dados do Amazon RDS, a região e a classe de instância são compatíveis com o Database Insights.

Insights de Performance

Ative o Insights de Performance para identificar as consultas responsáveis pelo carregamento do banco de dados.

Conclua as etapas a seguir:

  1. Acesse o Painel do Insights de Performance.
  2. Marque a guia Top SQL que corresponde ao período de tempo que você deseja analisar.
  3. Identifique a consulta que está demorando mais.
  4. Verifique a consulta que consome muitos recursos e os eventos de espera observados durante esse período. A seguir estão os eventos de espera frequentemente associados à alta utilização da CPU:

SOS_SCHEDULER_YIELD mostra que um thread de processamento cedeu para que outro thread seja executado. Quando as contagens de espera são altas com tempos de espera baixos, as consultas geralmente estão limitadas à CPU. Quando os threads de processamento cedem, os tempos de espera nas consultas vinculadas à CPU podem aumentar. Se o tempo de espera for longo, você deve analisar o workload. Se o SOS_SCHEDULER_YIELD prevalecer, a pressão da CPU será o problema. Analise o tipo de workload e realize ajustes adicionais.

CXPACKET e CXCONSUMER são eventos de espera relacionados ao paralelismo que geralmente não são um problema. Mas se os eventos de espera forem frequentes e estiverem afetando o desempenho, consulte as consultas e defina os valores apropriados para o limite de custo do paralelismo. Certifique-se de que o SQL Server esteja selecionando o parâmetro de paralelismo de menor custo no grupo de parâmetros. Também é possível aumentar o grau máximo de paralelismo, MAXDOP, para 1 no nível da consulta ou da instância.

ThreadPool mostra a exaustão do thread. Se sua classe de instância puder lidar com isso, aumente o parâmetro máximo de threads de processamento. É possível enfrentar esperas do ThreadPool quando houver uso excessivo de threads devido a bloqueios, alto workload ou um grande número de consultas paralelas. Além disso, se você configurar incorretamente o parâmetro máximo de threads de processamento, o evento de espera ThreadPool pode ocorrer.

Verifique as métricas do banco de dados para solicitações em lote, compilações do SQL e recompilações do SQL. Verifique as consultas que estão sendo compiladas mais de uma vez. Verifique também se as consultas são recompiladas com frequência em um determinado lote. Nesse caso, isso indica que a cláusula WITH RECOMPILE é usada no código da consulta. Esses dois motivos podem causar o uso excessivo da CPU.

Ferramentas do SQL Server

Para solucionar problemas de alta utilização da CPU com as ferramentas do SQL Server, realize as seguintes ações:

  • Analise consultas específicas para alta utilização da CPU, estatísticas de atualização, índices ausentes e detecção de parâmetros. Para obter mais informações, consulte Troubleshoot high-CPU-usage issues in SQL Server (Solucionar problemas de alta utilização da CPU no SQL Server) no site da Microsoft.
  • Verifique se há consultas com desempenho insatisfatório no plano de execução e, em seguida, realize mais ajustes. Para obter mais informações, consulte Display an actual execution plan (Exibir um plano de execução real) no site da Microsoft.
  • Use consultas e Eventos estendidos para solucionar problemas relacionados a bloqueios excessivos, bloqueios e deadlocks. Para obter mais informações, consulte Understand and resolve SQL Server blocking problems (Compreender e resolver problemas de bloqueio do SQL Server) no site da Microsoft.
    Observação: ao configurar Eventos estendidos no RDS para SQL Server, não é possível usar o método padrão para salvar arquivos .xel.
  • Use os relatórios do SQL Server para ajustar seu workload. Para obter mais informações, consulte Performance Dashboard (Painel de desempenho) no site da Microsoft.