Otimização de desempenho do PostgreSQL para Odoo: ajuste, indexação e monitoramento

Otimize o PostgreSQL para desempenho do Odoo. Aprenda ajuste de configuração, estratégias de indexação, análise de consultas, gerenciamento de vácuo, pool de conexões e práticas recomendadas de monitoramento.

E

ECOSIRE Research and Development Team

Equipe ECOSIRE

5 de março de 20266 min de leitura1.2k Palavras

Otimização de desempenho do PostgreSQL para Odoo: ajuste, indexação e monitoramento

Uma instância do PostgreSQL devidamente ajustada pode melhorar os tempos de resposta do Odoo em 2 a 5x em comparação com as configurações padrão. A maioria dos problemas de desempenho do Odoo remonta à configuração do banco de dados – as configurações padrão do PostgreSQL são projetadas para uso mínimo de recursos, não para alimentar um sistema ERP multiusuário.

Principais conclusões

  • As configurações padrão do PostgreSQL usam apenas buffers compartilhados de 128 MB - a produção do Odoo precisa de 25% de RAM
  • Índices ausentes em colunas consultadas com frequência causam varreduras completas da tabela e carregamentos lentos de páginas
  • O pool de conexões com PgBouncer reduz a sobrecarga de conexão do banco de dados em 80%
  • VACUUM e ANALYZE regulares evitam o inchaço da tabela e mantêm os planos de consulta ideais

Ajuste de configuração do PostgreSQL

Configurações de memória

Edite postgresql.conf com configurações apropriadas para seu hardware. Para um servidor com 16 GB de RAM, defina shared_buffers como 4 GB (25% da RAM total), Effective_cache_size como 12 GB (75% da RAM total), work_mem como 64 MB por operação, Maintenance_work_mem como 1 GB e wal_buffers como 64 MB.

Para planejamento de consulta, defina random_page_cost como 1,1 para armazenamento SSD (o padrão 4.0 pressupõe HDD), Effective_io_concurrency como 200 para SSDs e default_statistics_target como 200 para planos de consulta mais precisos.

Diretrizes de tamanho:

| RAM do servidor | buffers_compartilhados | tamanho_de_cache_efetivo | trabalho_mem | |-----------|---------------|----------|----------| | 4 GB | 1 GB | 3 GB | 16 MB | | 8 GB | 2 GB | 6 GB | 32 MB | | 16 GB | 4 GB | 12GB | 64 MB | | 32 GB | 8 GB | 24 GB | 128 MB | | 64 GB | 16 GB | 48 GB | 256 MB |

Configurações de conexão

Defina max_connections para pelo menos trabalhadores Odoo x 2 mais buffer. Com 4 trabalhadores e 2 threads cron, você precisa de pelo menos 12 conexões. Adicione conexões para ferramentas administrativas, monitoramento e tarefas em segundo plano. Um valor de 200 fornece um espaço confortável.


Estratégias de indexação para Odoo

Identificando índices ausentes

Habilite o registro de consultas lentas definindo log_min_duration_statement como 500 ms. Em seguida, analise o log de consultas lentas para identificar verificações completas da tabela.

Índices Odoo Comuns

Odoo cria índices em chaves primárias e estrangeiras automaticamente. Adicione índices em colunas filtradas com frequência, como sale_order(state), account_move(state), stock_move(state), account_move(date) e sale_order(date_order).

Os índices de múltiplas colunas melhoram as combinações de filtros comuns: account_move_line(account_id, date) e stock_quant(product_id, location_id).

Para tabelas com colunas de status, os índices parciais em registros ativos são mais eficientes - indexa apenas linhas onde o estado não foi cancelado ou concluído.


Análise de consulta com EXPLAIN ANALYZE

Execute EXPLAIN (ANALYZE, BUFFERS) em consultas lentas para entender os planos de execução. Procure:

  • Seq Scan: verificação completa da tabela indicando um índice ausente
  • Loop aninhado: pode ser caro com grandes conjuntos de resultados
  • Classificar: classificações na memória que excedem o derramamento de work_mem no disco
  • Leitura compartilhada de buffers: valores altos significam que os dados não são armazenados em cache

Destruidores de desempenho comuns:

  1. Índices ausentes nas colunas da cláusula WHERE
  2. Grandes cláusulas IN geradas pelo Odoo ORM
  3. Campos computados armazenados acionando recálculo em gravações
  4. Consultas de relatórios complexos juntando mais de 5 tabelas

VÁCUO e Manutenção

PostgreSQL MVCC cria tuplas mortas quando as linhas são atualizadas ou excluídas. VACUUM recupera este espaço e atualiza as estatísticas.

Configure o autovacuum para cargas de trabalho Odoo: habilite o autovacuum com no máximo 3 trabalhadores, tempo de soneca de 60 segundos, fator de escala de vácuo de 0,05 e fator de escala de análise de 0,02. Para tabelas com alta gravação (account_move_line, stock_move, mail_message), defina configurações mais agressivas por tabela.

Monitore o inchaço da tabela verificando os tamanhos totais das relações e as contagens de tuplas mortas. Use VACUUM FULL only for extreme bloat (over 50% dead space) and only during maintenance windows since it locks the table.


Pool de conexões com PgBouncer

O PgBouncer fica entre o Odoo e o PostgreSQL, agrupando conexões para reduzir a sobrecarga. Use o modo pool de transações para Odoo, que libera conexões entre transações. Defina default_pool_size como 40 e max_client_conn como 200. Aponte o Odoo para a porta PgBouncer em vez do PostgreSQL diretamente.


Monitoramento

Métricas Essenciais

  • Conexões ativas: devem ficar bem abaixo de max_connections
  • Taxa de acertos de cache: deve estar acima de 99%
  • Taxa de transação: referência e observação de anomalias
  • Contagem lenta de consultas: consultas que excedem seu limite
  • Atraso de replicação: se estiver usando réplicas de leitura
  • Uso de disco: taxa de crescimento do tamanho do banco de dados
  • Inchaço da tabela: proporção de tuplas mortas por tabela

Use a extensão pg_stat_statements para monitorar o desempenho da consulta ao longo do tempo. Ele registra a contagem de execução, o tempo total, o tempo médio e as linhas retornadas para cada padrão de consulta distinto.


Perguntas frequentes

P: Como posso saber se o PostgreSQL é o gargalo?

Habilite o registro de consultas lentas e verifique os registros de desempenho do Odoo. Se a maioria das solicitações lentas corresponderem a consultas lentas, o ajuste ajudará. Se as consultas forem rápidas, mas o Odoo for lento, o gargalo estará no código do aplicativo ou na rede.

P: Devo usar réplicas do PostgreSQL para Odoo?

As réplicas de leitura descarregam consultas de relatórios do banco de dados primário. Odoo não oferece suporte nativo à divisão de leitura/gravação, portanto, a configuração personalizada roteia consultas somente leitura para réplicas. Isso é útil principalmente para implantações muito grandes.

P: Qual versão do PostgreSQL devo usar com o Odoo?

Use a versão estável mais recente suportada pela sua versão Odoo. As versões mais recentes incluem melhorias no otimizador de consulta e melhor desempenho de vácuo. PostgreSQL 16 ou 17 são recomendados para versões atuais do Odoo.

P: Quanto o ajuste adequado realmente ajuda?

Em nossa experiência, passar das configurações padrão para configurações ajustadas normalmente melhora o tempo médio de carregamento da página em 40-60% e reduz a frequência de consulta lenta em 80-90%. A melhoria é dramática e imediata.


O que vem a seguir

O ajuste do PostgreSQL é a otimização de maior impacto para o desempenho do Odoo. Comece com configurações de memória e indexação – essas duas alterações por si só costumam reduzir o tempo de resposta pela metade.

Entre em contato com a ECOSIRE para obter ajuda na otimização do banco de dados ou explore nossos serviços de suporte Odoo para gerenciamento contínuo de desempenho.


Publicado pela ECOSIRE – ajudando empresas a escalar com soluções de software empresarial.

E

Escrito por

ECOSIRE Research and Development Team

Construindo produtos digitais de nível empresarial na ECOSIRE. Compartilhando insights sobre integrações Odoo, automação de e-commerce e soluções de negócios com IA.

Converse no WhatsApp