Compartilhar via


Alta utilização de memória no Banco de Dados do Azure para PostgreSQL – Servidor Flexível

APLICA-SE A: Banco de Dados do Azure para PostgreSQL – Servidor Flexível

Este artigo apresenta cenários comuns e causas raiz que podem levar à alta utilização de memória no Banco de Dados do Azure para servidor flexível PostgreSQL.

Neste artigo, você aprende:

  • Sobre guias de solução de problemas para identificar e obter recomendações para atenuar as causas raiz.
  • Ferramentas para identificar a alta utilização da memória.
  • Razões para memória alta e ações corretivas.

Guias de solução de problemas

Usando os guias de solução de problemas de recursos, que estão disponíveis no portal do servidor flexível do Banco de Dados do Azure para PostgreSQL, a provável causa raiz e as recomendações para o cenário de mitigação de memória alta podem ser encontradas. Para saber como configurar os guias de solução de problemas para usá-los, siga configurar os guias de solução de problemas.

Ferramentas para identificar a alta utilização da memória

Considere as ferramentas a seguir para identificar a alta utilização da memória.

Métricas do Azure

Use as Métricas do Azure para monitorar o percentual de memória em uso para o período de data e hora definidos.
Para monitoramento proativo, configure alertas nas métricas. Para obter diretrizes passo a passo, consulte Métricas do Azure.

Repositório de Consultas

O Repositório de Consultas captura automaticamente um histórico das estatísticas de runtime e consultas e o retém para sua análise.

Repositório de Consultas pode correlacionar informações de evento de espera com estatísticas de tempo de execução de consulta. Use Repositório de Consultas para identificar consultas que têm alto consumo de memória durante o período de interesse.

Para obter mais informações sobre como configurar e usar Repositório de Consultas, examine Repositório de Consultas.

Motivos e ações corretivas

Considere os motivos a seguir e as ações corretivas para resolver a utilização de memória alta.

Parâmetros do Servidor

Os seguintes parâmetros de servidor afetam o consumo de memória e devem ser revisados:

Work_Mem

Esse parâmetro work_mem define a quantidade de memória a ser usada por operações de classificação interna e tabelas de hash antes de gravar em arquivos de disco temporários. Ele não está em uma base por consulta, em vez disso, é definido com base no número de operações de tipo e hash.

Se a carga de trabalho tiver muitas consultas de execução curta com junções simples e operações de classificação mínimas, é recomendável manter-se menor do que work_mem. Se houver algumas consultas ativas com junções e classificações complexas, é recomendável definir um valor mais alto para work_mem.

É difícil obter o valor de work_mem. Se você observar problemas de utilização de memória alta ou fora da memória, considere diminuir work_mem.

Uma configuração mais segura para work_mem é work_mem = Total RAM / Max_Connections / 16

O valor padrão de work_mem é 4 MB. Você pode definir o work_mem em vários níveis, incluindo no nível do servidor por meio da página de parâmetros no portal do Azure.

Uma boa estratégia é monitorar o consumo de memória durante os horários de pico.

Se as classificações de disco ocorrerem durante esse período e houver muita memória não utilizada, aumente work_mem gradualmente até conseguir um bom equilíbrio entre a memória disponível e a utilizada. Da mesma forma, se o uso de memória parecer alto, reduza work_mem.

Maintenance_Work_Mem

maintenance_work_mem é para tarefas de manutenção, como aspirar, adicionar índices ou chaves estrangeiras. O uso da memória nesse cenário é por sessão.

Por exemplo, considere um cenário em que há três trabalhos de desastre automático em execução.

Se maintenance_work_mem estiver definido como 1 GB, todas as sessões combinadas usarão 3 GB de memória.

Um valor alto maintenance_work_mem, juntamente com várias sessões em execução para aspirar/criar índice/adicionar chaves estrangeiras, pode causar alta utilização de memória. O valor máximo permitido para o maintenance_work_mem parâmetro server no Banco de Dados do Azure para servidor flexível PostgreSQL é 2 GB.

Buffers compartilhados

O parâmetro shared_buffers determina a quantidade de memória dedicada ao servidor para armazenar dados em cache. O objetivo dos buffers compartilhados é reduzir a E/S do DISCO.

Uma configuração razoável para buffers compartilhados é de 25% da RAM. Definir um valor superior a 40% de RAM não é recomendado para as cargas de trabalho mais comuns.

Conexões máximas

Todas as conexões novas e ociosas em um banco de dados de servidor flexível do Banco de Dados do Azure para PostgreSQL consomem até 2 MB de memória. Uma maneira de monitorar conexões é usando a seguinte consulta:

select count(*) from pg_stat_activity;

Quando o número de conexões com um banco de dados é alto, o consumo de memória também aumenta.

Quando houver muitas conexões de banco de dados, considere usar um pooler de conexão como o PgBouncer.

Para obter mais detalhes sobre PgBouncer, examine:

Pooler de conexões.

Melhores práticas.

O Banco de Dados do Azure para servidor flexível PostgreSQL oferece o PgBouncer como uma solução interna de pool de conexões. Para obter mais informações, confira PgBouncer.

Explain Analyze

Após identificar as consultas de alto consumo de memória no Repositório de Consultas, use EXPLAIN, e EXPLAIN ANALYZE para investigar mais e ajustá-las.

Para obter mais informações sobre o comando EXPLAIN, examine Explain Plan.