Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Beta License: AGPL-3 OCA/server-tools Translate me on Weblate Try me on Runboat

This module makes it possible to use PgBouncer as a connection pooler for odoo.

Why isn’t odoo’s connection pooling good enough?

Odoo’s builtin connection pooling works at process level: each Odoo process has its own ConnectionPool, limited to db_maxconn.

It does the job of re-using open connections available in the pool. But it never closes these connections, unless reaching db_maxconn.

In practice, we observe that each odoo worker will end up with up to 3 open connection in its pool. With 10 http workers, that’s up to 30 connection continuously open just for one single instance.

Here comes PgBouncer

PgBouncer will help to limit this number of open connections, by sharing a pool of connections at the instance level, between all workers. Odoo workers will still have up to 3 open connections, but these will be connections to PgBouncer, that on its side will close unnecessary connections to pg.

This has proven to help performances on Odoo deployments with multiple instances.

It allows you to define how resources should be shared, according to your priorities, e.g. :

  • key odoo instance on host A can open up to 30 connections

  • while odoo instance on host B, dedicated to reports, can open up to 10 connections only

And most importantly, it helps you to ensure that max_connections will never be reached on pg server side.

Why is this module needed?

When configuring PgBouncer, you can choose between 2 transaction pooling modes:

  • pool_mode = session

  • pool_mode = transaction

If we choose pool_mode = session, then one server connection will be tied to a given odoo process until its death, which is exactly what we’re trying to change. Thus, to release the server connection once the transaction is complete, we use pool_mode = transaction.

This works fine, except for Odoo’s longpolling features that relies on the LISTEN/NOTIFY mechanism from pg, which is not compatible with that mode.

To be more precise, NOTIFY statements are properly transfered by PgBouncer in that mode; only the LISTEN statement isn’t (because it needs to keep the server connection open).

So for the unique “listening” connection per instance that requires this statement (here), we need odoo to connect directly to the pg server, bypassing PgBouncer.

That’s what this module implements, by overriding the relevant method of the Dispatcher.

Table of contents

Installation

You don’t need to install this module in the database(s) to enable it.

But you need to load it server-wide:

  • By starting Odoo with --load=web,bus_alt_connection

  • Or by updating its configuration file:

[options]
(...)
server_wide_modules = web,bus_alt_connection

Configuration

You need to define how to connect directly to the database:

  • Either by defining environment variables:

    • IMDISPATCHER_DB_HOST=db-01

    • IMDISPATCHER_DB_PORT=5432

  • Or in Odoo’s configuration file:

[options]
(...)
imdispatcher_db_host = db-01
imdispatcher_db_port = 5432

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed feedback.

Do not contact contributors directly about support or help with technical issues.

Credits

Authors

  • Trobz

Contributors

Maintainers

This module is maintained by the OCA.

Odoo Community Association

OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use.

This module is part of the OCA/server-tools project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

Metadata

Release files for odoo14-addon-bus-alt-connection 14.0.1.0.1.dev3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distribution (wheel)

Table of built distributions (wheels) for odoo14-addon-bus-alt-connection 14.0.1.0.1.dev3
File Interpreter ABI Platform
odoo14_addon_bus_alt_connection-14.0.1.0.1.dev3-py3-none-any.whl Python 3 none any Details

Release files / odoo14_addon_bus_alt_connection-14.0.1.0.1.dev3-py3-none-any.whl

Download URL odoo14_addon_bus_alt_connection-14.0.1.0.1.dev3-py3-none-any.whl
Size 28.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b76af53ebebbe343318575ccdf72c7ac75a031c6646fb2272175487ef673ba50
BLAKE2b-256 checksum
How to use checksums
fdfad1c5de298bd8926e04f5e8b67ceddd0097e9d0f134e157f3eeb7bcda14ee
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.12.3
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page