Optimización del rendimiento de PostgreSQL para Odoo: ajuste, indexación y monitoreo
Una instancia de PostgreSQL correctamente ajustada puede mejorar los tiempos de respuesta de Odoo entre 2 y 5 veces en comparación con la configuración predeterminada. La mayoría de los problemas de rendimiento de Odoo se remontan a la configuración de la base de datos: la configuración predeterminada de PostgreSQL está diseñada para un uso mínimo de recursos, no para alimentar un sistema ERP multiusuario.
Conclusiones clave
- La configuración predeterminada de PostgreSQL usa solo 128 MB de buffers compartidos; la producción de Odoo necesita el 25 % de RAM
- Los índices faltantes en las columnas consultadas con frecuencia provocan análisis completos de la tabla y cargas de página lentas.
- La agrupación de conexiones con PgBouncer reduce la sobrecarga de conexión de la base de datos en un 80%
- VACUUM y ANALYZE regulares previenen la hinchazón de la tabla y mantienen los planes de consulta óptimos
Ajuste de configuración de PostgreSQL
Configuración de memoria
Edite postgresql.conf con la configuración adecuada para su hardware. Para un servidor con 16 GB de RAM, configure los búferes compartidos en 4 GB (25 % del RAM total), el tamaño de caché efectivo en 12 GB (75 % del RAM total), el work_mem en 64 MB por operación, el mantenimiento_work_mem en 1 GB y el wal_buffers en 64 MB.
Para la planificación de consultas, establezca random_page_cost en 1.1 para almacenamiento SSD (el valor predeterminado 4.0 supone HDD), Effective_io_concurrency en 200 para SSD y default_statistics_target en 200 para planes de consulta más precisos.
Pautas de tallas:
| RAM del servidor | buffers_compartidos | tamaño_caché_efectivo | memoria_trabajo | |-----------|---------------|---------------------|----------| | 4GB | 1GB | 3GB | 16MB | | 8GB | 2GB | 6GB | 32MB | | 16GB | 4GB | 12GB | 64MB | | 32GB | 8GB | 24GB | 128MB | | 64 GB | 16GB | 48GB | 256 MB |
Configuración de conexión
Establezca max_connections en al menos trabajadores de Odoo x 2 más el búfer. Con 4 trabajadores y 2 subprocesos cron, necesitas al menos 12 conexiones. Agregue conexiones para herramientas de administración, monitoreo y tareas en segundo plano. Un valor de 200 proporciona un cómodo espacio para la cabeza.
Estrategias de indexación para Odoo
Identificar índices faltantes
Habilite el registro de consultas lento configurando log_min_duration_statement en 500 ms. Luego analice el registro de consultas lentas para identificar escaneos completos de la tabla.
Índices comunes de Odoo
Odoo crea índices en claves primarias y claves externas automáticamente. Agregue índices en columnas filtradas con frecuencia como sale_order(state), account_move(state), stock_move(state), account_move(date) y sale_order(date_order).
Los índices de varias columnas mejoran las combinaciones de filtros comunes: account_move_line(account_id, date) y stock_quant(product_id, location_id).
Para tablas con columnas de estado, los índices parciales en registros activos son más eficientes: indexe solo las filas donde el estado no está cancelado ni finalizado.
Análisis de consultas con EXPLAIN ANALYZE
Ejecute EXPLAIN (ANALYZE, BUFFERS) en consultas lentas para comprender los planes de ejecución. Busque:
- Seq Scan: escaneo completo de la tabla que indica que falta un índice
- Bucle anidado: puede resultar costoso con conjuntos de resultados grandes
- Ordenar: los ordenamientos en memoria exceden el derrame de work_mem en el disco.
- Lectura de buffers compartidos: los valores altos significan que los datos no se almacenan en caché
Asesinos comunes del rendimiento:
- Faltan índices en las columnas de la cláusula WHERE
- Cláusulas IN grandes generadas por Odoo ORM
- Campos calculados almacenados que activan el recálculo en escrituras
- Consultas de informes complejas que unen más de 5 tablas
ASPIRACIÓN y Mantenimiento
PostgreSQL MVCC crea tuplas muertas cuando se actualizan o eliminan filas. VACUUM recupera este espacio y actualiza las estadísticas.
Configure el vacío automático para cargas de trabajo de Odoo: habilite el vacío automático con 3 trabajadores como máximo, una siesta de 60 segundos, un factor de escala de vacío de 0,05 y analice un factor de escala de 0,02. Para tablas de alta escritura (account_move_line, stock_move, mail_message), establezca configuraciones por tabla más agresivas.
Supervise la inflación de la tabla comprobando el tamaño total de las relaciones y el recuento de tuplas muertas. Utilice VACUUM FULL solo para hinchazón extrema (más del 50% de espacio muerto) y solo durante las ventanas de mantenimiento, ya que bloquea la mesa.
Agrupación de conexiones con PgBouncer
PgBouncer se encuentra entre Odoo y PostgreSQL, agrupando conexiones para reducir la sobrecarga. Utilice el modo de grupo de transacciones para Odoo, que libera conexiones entre transacciones. Establezca default_pool_size en 40 y max_client_conn en 200. Apunte Odoo al puerto PgBouncer en lugar de PostgreSQL directamente.
Monitoreo
Métricas esenciales
- Conexiones activas: debe permanecer muy por debajo de max_connections
- Proporción de aciertos de caché: debe estar por encima del 99%
- Tasa de transacción: punto de referencia y atento a anomalías
- Recuento de consultas lento: consultas que superan su umbral
- Retraso de replicación: si se utilizan réplicas de lectura
- Uso de disco: tasa de crecimiento del tamaño de la base de datos
- Inflación de tabla: Proporción de tuplas muertas por tabla
Utilice la extensión pg_stat_statements para realizar un seguimiento del rendimiento de las consultas a lo largo del tiempo. Registra el recuento de ejecución, el tiempo total, el tiempo medio y las filas devueltas para cada patrón de consulta distinto.
Preguntas frecuentes
P: ¿Cómo sé si PostgreSQL es el cuello de botella?
Habilite el registro de consultas lento y verifique los registros de rendimiento de Odoo. Si la mayoría de las solicitudes lentas corresponden a consultas lentas, el ajuste será útil. Si las consultas son rápidas pero Odoo es lento, el cuello de botella está en el código de la aplicación o en la red.
P: ¿Debo usar réplicas de PostgreSQL para Odoo?
Las réplicas de lectura descargan consultas de informes de la base de datos principal. Odoo no admite de forma nativa la división de lectura/escritura, por lo que la configuración personalizada enruta consultas de solo lectura a las réplicas. Esto es principalmente útil para implementaciones muy grandes.
P: ¿Qué versión de PostgreSQL debo usar con Odoo?
Utilice la última versión estable compatible con su versión de Odoo. Las versiones más recientes incluyen mejoras en el optimizador de consultas y un mejor rendimiento del vacío. Se recomienda PostgreSQL 16 o 17 para las versiones actuales de Odoo.
P: ¿En qué medida ayuda realmente un ajuste adecuado?
Según nuestra experiencia, pasar de la configuración predeterminada a una configuración optimizada generalmente mejora los tiempos promedio de carga de la página entre un 40% y un 60% y reduce la frecuencia de consultas lentas entre un 80% y un 90%. La mejora es dramática e inmediata.
¿Qué sigue?
El ajuste de PostgreSQL es la optimización de mayor impacto para el rendimiento de Odoo. Comience con la configuración de la memoria y la indexación: estos dos cambios por sí solos a menudo reducen los tiempos de respuesta a la mitad.
Comuníquese con ECOSIRE para obtener ayuda sobre la optimización de la base de datos, o explore nuestros servicios de soporte de Odoo para una gestión continua del rendimiento.
Publicado por ECOSIRE: ayuda a las empresas a escalar con soluciones de software empresarial.
Escrito por
ECOSIRE Research and Development Team
Construyendo productos digitales de nivel empresarial en ECOSIRE. Compartiendo perspectivas sobre integraciones Odoo, automatización de eCommerce y soluciones empresariales impulsadas por IA.
Artículos relacionados
Integración de Allegro Marketplace con Odoo: la plataforma de comercio electrónico líder en Polonia
Guía completa para integrar el mercado de Allegro con Odoo ERP que cubre la configuración de API REST, Allegro Smart, ofertas y envíos para el comercio electrónico polaco.
Automatización de cuentas por pagar con Odoo: de la factura al pago
Automatice las cuentas por pagar en Odoo desde la captura de facturas hasta el flujo de trabajo de aprobación y la ejecución del pago. Reduzca los costos de procesamiento y elimine las multas por pagos atrasados.
Cómo elegir el CRM adecuado para su negocio en 2026
Una guía completa para seleccionar la plataforma CRM adecuada en 2026, comparando Odoo CRM, Salesforce, HubSpot, GoHighLevel y Zoho en cuanto a características, precios, escalabilidad y adecuación a la industria.