Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ addon | version | maintainers | summary
[base_time_window](base_time_window/) | 18.0.1.1.1 | | Base model to handle time windows
[base_view_inheritance_extension](base_view_inheritance_extension/) | 18.0.1.0.2 | | Adds more operators for view inheritance
[bus_alt_connection](bus_alt_connection/) | 18.0.1.0.0 | | Needed when using PgBouncer as a connection pooler
[database_autovacuum_tuning](database_autovacuum_tuning/) | 18.0.1.0.1 | | Scheduled checks for Odoo autovacuum thresholds and scale factors
[database_cleanup](database_cleanup/) | 18.0.1.0.2 | | Database cleanup
[database_size](database_size/) | 18.0.1.0.2 | | Database Size
[dbfilter_from_header](dbfilter_from_header/) | 18.0.1.0.0 | | Filter databases with HTTP headers
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,7 @@ msgstr ""
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_cleanup_purge_wizard_model__assigned_attachment_ids
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_cleanup_purge_wizard_module__assigned_attachment_ids
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_cleanup_purge_wizard_table__assigned_attachment_ids
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_database_autovacuum_tuning__assigned_attachment_ids
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_db_backup__assigned_attachment_ids
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_decimal_precision__assigned_attachment_ids
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_digest_digest__assigned_attachment_ids
Expand Down
1 change: 1 addition & 0 deletions autovacuum_message_attachment/i18n/ca.po
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,7 @@ msgstr ""
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_cleanup_purge_wizard_model__assigned_attachment_ids
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_cleanup_purge_wizard_module__assigned_attachment_ids
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_cleanup_purge_wizard_table__assigned_attachment_ids
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_database_autovacuum_tuning__assigned_attachment_ids
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_db_backup__assigned_attachment_ids
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_decimal_precision__assigned_attachment_ids
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_digest_digest__assigned_attachment_ids
Expand Down
1 change: 1 addition & 0 deletions autovacuum_message_attachment/i18n/es.po
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,7 @@ msgstr "Todos"
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_cleanup_purge_wizard_model__assigned_attachment_ids
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_cleanup_purge_wizard_module__assigned_attachment_ids
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_cleanup_purge_wizard_table__assigned_attachment_ids
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_database_autovacuum_tuning__assigned_attachment_ids
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_db_backup__assigned_attachment_ids
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_decimal_precision__assigned_attachment_ids
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_digest_digest__assigned_attachment_ids
Expand Down
1 change: 1 addition & 0 deletions autovacuum_message_attachment/i18n/es_AR.po
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,7 @@ msgstr "Todos"
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_cleanup_purge_wizard_model__assigned_attachment_ids
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_cleanup_purge_wizard_module__assigned_attachment_ids
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_cleanup_purge_wizard_table__assigned_attachment_ids
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_database_autovacuum_tuning__assigned_attachment_ids
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_db_backup__assigned_attachment_ids
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_decimal_precision__assigned_attachment_ids
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_digest_digest__assigned_attachment_ids
Expand Down
1 change: 1 addition & 0 deletions autovacuum_message_attachment/i18n/fr.po
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,7 @@ msgstr "Tous"
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_cleanup_purge_wizard_model__assigned_attachment_ids
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_cleanup_purge_wizard_module__assigned_attachment_ids
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_cleanup_purge_wizard_table__assigned_attachment_ids
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_database_autovacuum_tuning__assigned_attachment_ids
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_db_backup__assigned_attachment_ids
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_decimal_precision__assigned_attachment_ids
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_digest_digest__assigned_attachment_ids
Expand Down
1 change: 1 addition & 0 deletions autovacuum_message_attachment/i18n/it.po
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,7 @@ msgstr "Tutti"
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_cleanup_purge_wizard_model__assigned_attachment_ids
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_cleanup_purge_wizard_module__assigned_attachment_ids
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_cleanup_purge_wizard_table__assigned_attachment_ids
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_database_autovacuum_tuning__assigned_attachment_ids
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_db_backup__assigned_attachment_ids
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_decimal_precision__assigned_attachment_ids
#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_digest_digest__assigned_attachment_ids
Expand Down
127 changes: 127 additions & 0 deletions database_autovacuum_tuning/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
.. image:: https://odoo-community.org/readme-banner-image
:target: https://odoo-community.org/get-involved?utm_source=readme
:alt: Odoo Community Association

==========================
Database Autovacuum Tuning
==========================

..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:ed2cea913a7d93d83e99dc2d84a053972a91963c100bf3ea8ceca5e69c1c7315
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png
:target: https://odoo-community.org/page/development-status
:alt: Alpha
.. |badge2| image:: https://img.shields.io/badge/license-LGPL--3-blue.png
:target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html
:alt: License: LGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--tools-lightgray.png?logo=github
:target: https://github.com/OCA/server-tools/tree/18.0/database_autovacuum_tuning
:alt: OCA/server-tools
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/server-tools-18-0/server-tools-18-0-database_autovacuum_tuning
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/server-tools&target_branch=18.0
:alt: Try me on Runboat

|badge1| |badge2| |badge3| |badge4| |badge5|

Database Autovacuum Tuning helps administrators keep PostgreSQL healthy
by exposing recommended autovacuum settings in Odoo. It provides
guidance and documentation for sizing thresholds and scale factors so
large, busy databases avoid table bloat and excessive vacuum lag. Use it
to standardize autovacuum configuration across environments and speed up
maintenance operations without manual tuning.

This module is mostly useful for PostgreSQL <= 17. PostgreSQL 18.0
introduces the ``autovacuum_vacuum_max_threshold`` parameter, which
already provides the capability this module targets.

The ``pgstattuple`` extension must be installed on the database.

.. IMPORTANT::
This is an alpha version, the data model and design can change at any time without warning.
Only for development or testing purpose, do not use in production.
`More details on development status <https://odoo-community.org/page/development-status>`_

**Table of contents**

.. contents::
:local:

Usage
=====

1. Install the module on the database you want to tune.

2. Go to Settings > Technical > Database Structure > Database Autovacuum
Tuning and review the recommended thresholds and scale factors.

3. If needed, override the defaults using the following system
parameters:

- ``database_autovacuum_tuning.autovacuum_vacuum_max_threshold``
- ``database_autovacuum_tuning.autovacuum_vacuum_analyze_max_threshold``

4. The configuration parameters are applied to tables by the daily cron
job. When the number of dead tuples in a table exceeds the vacuum
threshold, it applies the following configuration:

.. code:: sql

ALTER TABLE {schemaname}.{tablename} SET (
autovacuum_vacuum_scale_factor = 0,
autovacuum_vacuum_threshold = %s,
autovacuum_analyze_scale_factor = 0,
autovacuum_analyze_threshold = %s
)

5. Monitor vacuum activity and table bloat, then adjust the settings if
your workload changes.

Bug Tracker
===========

Bugs are tracked on `GitHub Issues <https://github.com/OCA/server-tools/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 <https://github.com/OCA/server-tools/issues/new?body=module:%20database_autovacuum_tuning%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

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

Credits
=======

Authors
-------

* Camptocamp

Contributors
------------

- Telmo Santos <telmo.santos@camptocamp.com>
- Alexandre Fayolle <alexandre.fayolle@camptocamp.com>

Maintainers
-----------

This module is maintained by the OCA.

.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org

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 <https://github.com/OCA/server-tools/tree/18.0/database_autovacuum_tuning>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
1 change: 1 addition & 0 deletions database_autovacuum_tuning/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import models
24 changes: 24 additions & 0 deletions database_autovacuum_tuning/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Copyright 2026 Camptocamp (https://www.camptocamp.com).
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html)

{
"name": "Database Autovacuum Tuning",
"summary": "Scheduled checks for Odoo autovacuum thresholds and scale factors",
"version": "18.0.1.0.1",
"author": "Camptocamp, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/server-tools",
"category": "Tools",
"depends": [
"base_setup",
],
"data": [
"data/config_parameter.xml",
"data/ir_cron.xml",
"security/ir.model.access.csv",
"views/res_config_settings_views.xml",
"views/database_autovacuum_tuning_views.xml",
],
"development_status": "Alpha",
"license": "LGPL-3",
"installable": True,
}
18 changes: 18 additions & 0 deletions database_autovacuum_tuning/data/config_parameter.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">
<record id="config_autovacuum_vacuum_max_threshold" model="ir.config_parameter">
<field
name="key"
>database_autovacuum_tuning.autovacuum_vacuum_max_threshold</field>
<field name="value">100000</field>
</record>
<record
id="config_autovacuum_vacuum_analyze_max_threshold"
model="ir.config_parameter"
>
<field
name="key"
>database_autovacuum_tuning.autovacuum_vacuum_analyze_max_threshold</field>
<field name="value">50000</field>
</record>
</odoo>
13 changes: 13 additions & 0 deletions database_autovacuum_tuning/data/ir_cron.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="cron_database_autovacuum_tuning" model="ir.cron">
<field name="name">Database Autovacuum Tuning</field>
<field name="model_id" ref="model_database_autovacuum_tuning" />
<field name="state">code</field>
<field name="code">model._db_autovacuum_tune()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="active">True</field>
<field name="user_id" ref="base.user_root" />
</record>
</odoo>
122 changes: 122 additions & 0 deletions database_autovacuum_tuning/i18n/database_autovacuum_tuning.pot
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * database_autovacuum_tuning
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"

#. module: database_autovacuum_tuning
#: model:ir.model.fields,field_description:database_autovacuum_tuning.field_database_autovacuum_tuning__analyze_threshold
msgid "Analyze Threshold"
msgstr ""

#. module: database_autovacuum_tuning
#: model:ir.model.fields,field_description:database_autovacuum_tuning.field_res_config_settings__autovacuum_vacuum_analyze_max_threshold
msgid "Autovacuum Vacuum Analyze Max Threshold"
msgstr ""

#. module: database_autovacuum_tuning
#: model:ir.model.fields,field_description:database_autovacuum_tuning.field_res_config_settings__autovacuum_vacuum_max_threshold
msgid "Autovacuum Vacuum Max Threshold"
msgstr ""

#. module: database_autovacuum_tuning
#: model:ir.model,name:database_autovacuum_tuning.model_res_config_settings
msgid "Config Settings"
msgstr ""

#. module: database_autovacuum_tuning
#: model_terms:ir.ui.view,arch_db:database_autovacuum_tuning.databaseautovacuum_tuning_view_search
msgid "Create Date"
msgstr ""

#. module: database_autovacuum_tuning
#: model:ir.model.fields,field_description:database_autovacuum_tuning.field_database_autovacuum_tuning__create_uid
msgid "Created by"
msgstr ""

#. module: database_autovacuum_tuning
#: model:ir.model.fields,field_description:database_autovacuum_tuning.field_database_autovacuum_tuning__create_date
msgid "Created on"
msgstr ""

#. module: database_autovacuum_tuning
#: model:ir.actions.server,name:database_autovacuum_tuning.cron_database_autovacuum_tuning_ir_actions_server
#: model:ir.model,name:database_autovacuum_tuning.model_database_autovacuum_tuning
#: model:ir.ui.menu,name:database_autovacuum_tuning.menu_model_autovacuum_tuning
msgid "Database Autovacuum Tuning"
msgstr ""

#. module: database_autovacuum_tuning
#: model:ir.actions.act_window,name:database_autovacuum_tuning.action_model_autovacuum_tuning
msgid "Database Vacuum Tuning"
msgstr ""

#. module: database_autovacuum_tuning
#: model:ir.model.fields,field_description:database_autovacuum_tuning.field_database_autovacuum_tuning__display_name
msgid "Display Name"
msgstr ""

#. module: database_autovacuum_tuning
#: model_terms:ir.ui.view,arch_db:database_autovacuum_tuning.databaseautovacuum_tuning_view_search
msgid "Group By"
msgstr ""

#. module: database_autovacuum_tuning
#: model:ir.model.fields,field_description:database_autovacuum_tuning.field_database_autovacuum_tuning__id
msgid "ID"
msgstr ""

#. module: database_autovacuum_tuning
#: model:ir.model.fields,field_description:database_autovacuum_tuning.field_database_autovacuum_tuning__write_uid
msgid "Last Updated by"
msgstr ""

#. module: database_autovacuum_tuning
#: model:ir.model.fields,field_description:database_autovacuum_tuning.field_database_autovacuum_tuning__write_date
msgid "Last Updated on"
msgstr ""

#. module: database_autovacuum_tuning
#: model:ir.model.fields,field_description:database_autovacuum_tuning.field_database_autovacuum_tuning__name
#: model_terms:ir.ui.view,arch_db:database_autovacuum_tuning.databaseautovacuum_tuning_view_search
msgid "Name"
msgstr ""

#. module: database_autovacuum_tuning
#: model:ir.model.fields,field_description:database_autovacuum_tuning.field_database_autovacuum_tuning__smart_search
#: model:ir.model.fields,field_description:database_autovacuum_tuning.field_res_config_settings__smart_search
msgid "Smart Search"
msgstr ""

#. module: database_autovacuum_tuning
#: model:ir.model.fields,help:database_autovacuum_tuning.field_database_autovacuum_tuning__name
msgid "Table name"
msgstr ""

#. module: database_autovacuum_tuning
#: model_terms:ir.ui.view,arch_db:database_autovacuum_tuning.res_config_settings_view_form
msgid ""
"The maximum number of tuples that can be updated or deleted before a vacuum "
"analyze is triggered."
msgstr ""

#. module: database_autovacuum_tuning
#: model_terms:ir.ui.view,arch_db:database_autovacuum_tuning.res_config_settings_view_form
msgid ""
"The maximum number of tuples that can be updated or deleted before a vacuum "
"is triggered."
msgstr ""

#. module: database_autovacuum_tuning
#: model:ir.model.fields,field_description:database_autovacuum_tuning.field_database_autovacuum_tuning__vacuum_threshold
msgid "Vacuum Threshold"
msgstr ""
2 changes: 2 additions & 0 deletions database_autovacuum_tuning/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from . import database_autovacuum_tuning
from . import res_config_settings
Loading
Loading