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:
- Índices ausentes nas colunas da cláusula WHERE
- Grandes cláusulas IN geradas pelo Odoo ORM
- Campos computados armazenados acionando recálculo em gravações
- 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.
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.
Artigos Relacionados
Integração do Allegro Marketplace com Odoo: a plataforma de comércio eletrônico líder da Polônia
Guia completo para integração do mercado Allegro com Odoo ERP, cobrindo configuração da API REST, Allegro Smart, licitação e envio para comércio eletrônico polonês.
Automação de contas a pagar com Odoo: da fatura ao pagamento
Automatize contas a pagar no Odoo, desde a captura de faturas, passando pelo fluxo de trabalho de aprovação até a execução do pagamento. Reduza os custos de processamento e elimine multas por atraso no pagamento.
Como escolher o CRM certo para o seu negócio em 2026
A complete guide to selecting the right CRM platform in 2026, comparing Odoo CRM, Salesforce, HubSpot, GoHighLevel, and Zoho across features, pricing, scalability, and industry fit.