Ir para o conteúdo

Como soluciono problemas de pouca memória que pode ser liberada em minha instância do RDS para SQL Server?

9 minuto de leitura
0

Quero solucionar problemas de pouca memória que pode ser liberada em minha instância do Amazon Relational Database (Amazon RDS) para SQL Server.

Resolução

Monitorar o uso de memória em sua instância

Para monitorar seu uso de memória, é possível usar as Amazon CloudWatch Metrics ou o Monitoramento aprimorado.

Use CloudWatch Metrics

Para identificar pouca memória, use o console do Amazon RDS para monitorar a métrica FreeableMemory do CloudWatch.

Para identificar um aumento do workload quando a memória disponível estiver baixa, monitore as seguintes métricas:

  • DatabaseConnections
  • CPUUtilization
  • ReadIOPS
  • ReadThroughput
  • WriteIOPS
  • WriteThroughput

Para obter mais informações sobre as métricas anteriores, consulte Métricas específicas da instância do Amazon CloudWatch para Amazon RDS.

Ative o Monitoramento aprimorado

Para monitorar as métricas do sistema operacional (SO) do Microsoft SQL Server, use o Monitoramento aprimorado. Ao ativar o Monitoramento aprimorado, é possível definir o intervalo de coleta de métricas para 1, 5, 10, 15, 30 ou 60 segundos. O padrão é uma granularidade de 60 segundos, mas é uma prática recomendada definir a granularidade para 1 ou 5 segundos.

Também é possível usar o Monitoramento aprimorado para criar alarmes do CloudWatch para monitorar o uso de memória da sua instância de banco de dados do Amazon RDS para SQL Server.

Limite a memória que a instância do Amazon RDS usa

Determine o valor de max_server_memory para sua instância e, em seguida, defina o valor de max_server_memory como um valor que não cause pressão de memória em todo o sistema.

Determine o de valor max_server_memory

Use o cálculo a seguir para determinar o valor de max_server_memory para sua instância:

max_server_memory = total_RAM - (1 GB for the OS + memory_basis_amount_of_RAM_on_the_server)

total_RAM é igual à memória total do tipo de instância.

memory_basis_amount_of_RAM_on_the_server é determinada das seguintes maneiras:

  • Se a RAM no servidor estiver entre 4 GB e 16 GB, mantenha 1 GB por 4 GB de RAM. Por exemplo, mantenha 4 GB em um servidor com 16 GB de RAM.

  • Se a RAM no servidor for superior a 16 GB, mantenha 1 GB por 4 GB de RAM até 16 GB. Mantenha 1 GB por 8 GB de RAM maior que 16 GB.

Por exemplo, se um servidor tiver 64 GB de RAM, o cálculo de max_server_memory será o seguinte:

  • 1 GB para o SO
  • Até 16 GB de RAM: 16/4 = 4 GB
  • RAM restante maior que 16 GB: (64-16)/8 = 6 GB
  • (1 GB para o SO + memory_basis_amount_of_RAM_on_the_server) = 1 + 4 + 6 = 11 GB
  • max_server_memory: 64 - 11 = 53 GB

Defina o max_server_memory

Para alterar o max_server_memory, use um grupo de parâmetros personalizado para configurar o valor. Forneça o valor de max_server_memory na memória máxima do servidor (MB). Como max_server_memory é um parâmetro dinâmico, você não precisa reinicializar para que as alterações entrem em vigor.

Observação: depois de configurar max_server_memory, você deve monitorar continuamente FreeableMemory para saber se deve aumentar ou diminuir a memória alocada.

Verifique se você usa as opções SSIS, SSAS ou SSRS na instância de banco de dados

Verifique seu grupo de opções do RDS para saber se você usa as opções SQL Server Integration Services (SSIS), SQL Server Analysis Services (SSAS) ou SQL Server Reporting Services (SSRS) na instância de banco de dados. A memória que as opções usam existe fora da configuração max_server_memory e aumenta o espaço ocupado pela memória na instância. Se você não usar essas opções, modifique o grupo de opções para removê-las.

Observação: se você estiver usando SSIS, SSAS ou SSRS na instância, deve ajustar max_server_memory para acomodar as opções.

Por exemplo, se você estiver usando SSRS, defina o valor de Máximo de memória do SSRS como 10% da memória total da instância de banco de dados. Por exemplo, 10% em uma instância com 64 GiB de memória é aproximadamente 6,4 GiB. Então, ajuste o valor max_server_memory para aproximadamente 46 GiB (64 - 11 - 6,4 = 46 GiB).

Verifique as conexões do banco de dados

Cada conexão de banco de dados que você faz com a instância exige alguma alocação de memória fora do grupo de buffer para threads de processamento. Portanto, um pico no DatabaseConnections pode causar uma queda na memória que pode ser liberada.

Monitore a instância de banco de dados com o Insights de Performance

É possível usar o Insights de Performance para analisar o desempenho do seu banco de dados e identificar possíveis gargalos que tornam a instância mais lenta. Use o painel do Insights de Performance para monitorar a carga, as esperas, as consultas, os hosts e os usuários do banco de dados.

Realize manutenção regular na instância de banco de dados

Realize manutenção regular do índice e mantenha as estatísticas atualizadas. Índices altamente fragmentados podem aumentar a atividade de E/S e causar mais uso da memória. Além disso, estatísticas desatualizadas podem resultar em uma estimativa de cardinalidade imprecisa e fazer com que o banco de dados selecione um plano de consulta abaixo do ideal. Para obter mais informações, consulte Optimize index maintenance to improve query performance and reduce resource consumption (Otimizar a manutenção do índice para melhorar o desempenho da consulta e reduzir o consumo de recursos) no site da Microsoft. Além disso, consulte UPDATE STATISTICS (Transact-SQL) (ATUALIZAR ESTATÍSTICAS (Transact-SQL)) no site da Microsoft.

Observação: é uma prática recomendada realizar a manutenção de índices e estatísticas fora do horário de pico ou durante uma janela de manutenção.

Monitore o PLE e o BCHR

Para identificar a pressão da memória, monitore a expectativa de vida útil da página (Page Life Expectancy, PLE) e a taxa de acertos de cache em buffer (Buffer Cache Hit Ratio, BCHR). Para ter um desempenho ideal, verifique se os valores de PLE e BCHR são os mais altos possíveis. Se os valores de PLE e BCHR forem consistentemente baixos durante um período de tempo, ajuste as consultas que acessam os dados ou aumente a classe da instância para fornecer mais memória.

Para usar o Insights de Performance para monitorar as métricas, conclua as seguintes etapas:

  1. Abra o console do Amazon RDS.
  2. No painel de navegação, clique em Insights de Performance.
  3. Use o campo de pesquisa Filtrar uma instância de banco de dados para selecionar a instância que você deseja monitorar.
  4. Defina o intervalo de tempo para o qual você deseja analisar as métricas.
  5. No painel Métricas, selecione Painel personalizado - banco de dados do SQL Server e clique em Adicionar primeiro widget.
  6. No campo de pesquisa Filtrar métricas por nome, categoria ou ID, pesquise por Expectativa de vida da página e selecione-a.
  7. Clique em Adicionar widget.
  8. Repita as etapas 6 e 7 para selecionar a Taxa de acertos de cache em buffer no painel personalizado.

Para obter mais informações sobre PLE e BCHR, consulte Buffer manager performance objects (Objetos de desempenho do gerenciador de buffer) no site da Microsoft.

Quando há pressão de memória na instância e baixo PLE e BCHR, a espera do PAGEIOLATCH aumenta. O Microsoft SQL Server está aguardando o carregamento de uma página do disco para a memória. Também é possível ver a espera de RESOURCE_SEMAPHORE quando a solicitação de memória de uma consulta falha devido à falta de memória. O uso da CPU então aumenta porque as páginas de dados não são armazenadas em cache por tempo suficiente na memória. Quando isso ocorre, o Microsoft SQL Server deve acessar repetidamente os dados no disco.

Selecione o tamanho correto da instância para o seu workload

A quantidade de memória em uma instância depende do tipo de instância. Certifique-se de selecionar uma classe de instância com recursos suficientes para que a instância de banco de dados tenha recursos suficientes para o workload. Quando uma instância tem menos recursos, você enfrenta problemas de desempenho. Uma instância superdimensionada desperdiça recursos.

Por exemplo, a classe de instância db.r5.8xlarge fornece 32 vCPUs e 256 GiB de memória. Quando você provisiona uma instância do Amazon RDS com db.r5.8xlarge, os seguintes recursos compartilham todos os 256 GiBs de memória na classe da instância:

  • O sistema operacional
  • Processos do Amazon RDS
  • O mecanismo do banco de dados
  • Threads de processamento
  • Aplicações do pacote de Business Intelligence, como SSIS, SSAS e SSRS.

Para obter mais informações sobre como o Microsoft SQL Server usa a memória, consulte o Memory management architecture guide (Guia de arquitetura de gerenciamento de memória) no site da Microsoft.

Estabeleça uma linha de base do seu uso de recursos

Para estabelecer uma linha de base do seu uso de recursos na instância, monitore métricas como FreeableMemory, Expectativa de vida da página e Taxa de acertos de cache de buffer. Se o volume de dados aumentar significativamente na instância, aumente o valor de max_server_memory. Certifique-se de aumentar o valor de max_server_memory em proporção à alteração do volume de dados para manter o mesmo nível de desempenho na instância.

Observação: para identificar componentes que estão usando memória no SQL Server, é possível usar as ferramentas do SQL Server, como relatórios e DMVs.

Para usar o SQL Server Management Studio (SSMS) para analisar o uso da memória do SQL Server, conclua as seguintes etapas:

  1. Abra o SSMS e, em seguida, conecte-se à sua instância do Amazon RDS para SQL Server.
  2. No Explorador de objetos, clique com o botão direito do mouse no nome do endpoint da instância do Amazon RDS.
  3. Selecione Relatórios, Relatórios padrão, Consumo de memória.

Para baixar o SSMS, consulte Install SQL Server Management Studio (Baixar o SQL Server Management Studio (SSMS)) no site da Microsoft.

Também é possível consultar sys.dm_os_memory_clerks para identificar os componentes que usam o máximo de memória dentro do SQL Server. Para obter mais informações, consulte sys.dm_os_memory_clerks (Transact-SQL) e Internal memory usage by SQL Server engine (Uso de memória interna pelo mecanismo do SQL Server) no site da Microsoft.