Documentation10 min de lecture

Exploiter une instance Odoo : sauvegardes, volume, purges et erreurs

Le module OCA `database_size` (dépôt `server-tools`, version 18.0.1.0.2, licence AGPL-3) **mesure et journalise chaque jour la taille disque de chaque modèle** — tables, index, tables de relation et pièces jointes — avec une vue de comparaison sous **Paramètres ▸ Technique ▸ Database Size**. Quinze autres modules traitent les sauvegardes, les purges, la remontée d'erreurs et l'analyse de code.

Écran de supervision technique dans une salle serveur

Une instance Odoo qui fonctionne bien pendant deux ans finit par ralentir, et personne ne sait pourquoi : la base a triplé, les pièces jointes sont dupliquées, les messages s'accumulent, et une action planifiée échoue en silence depuis trois semaines.

Seize modules communautaires outillent l'exploitation d'une instance.

Résumé

Quatre modules traitent le volume : la taille par modèle mesurée et journalisée chaque jour, le réglage de l'autovacuum PostgreSQL sur les tables qui accumulent des lignes mortes, des règles de purge des anciens messages et pièces jointes, et la désactivation de l'indexation du contenu des pièces jointes.

Trois modules traitent les sauvegardes et les pièces jointes : des sauvegardes planifiées en local et vers un serveur distant en SFTP, la restriction de la suppression des pièces jointes par niveau, et le nettoyage des boîtes de messagerie entrantes.

Quatre modules traitent les erreurs et les sessions : l'envoi d'un courriel quand une action planifiée échoue, la remontée vers Sentry des erreurs applicatives, le stockage des sessions en base pour les déploiements à plusieurs serveurs, et le filtrage des bases par en-tête HTTP du proxy.

Cinq modules enfin traitent l'inventaire et la migration : l'analyse du code installé par auteur et par type — cœur Odoo, OCA, développement interne —, l'analyse de migration comparant deux bases, la liste des modules auto-installables modifiable par configuration, et l'enregistrement des hôtes distants qui se connectent.

L'essentiel

  • La taille disque par modèle, mesurée chaque jour.
  • Des sauvegardes planifiées en local et en SFTP.
  • Des règles de purge des messages et pièces jointes anciens.
  • L'autovacuum PostgreSQL réglé sur les tables à lignes mortes.
  • Un courriel quand une action planifiée échoue.
  • Les erreurs remontées vers Sentry.
  • Les sessions stockées en base pour plusieurs serveurs.
  • Le code installé analysé par auteur : cœur, OCA, interne.

Ce que ces modules ajoutent à l'instance

FamilleModulesNombre
Volumedatabase_size, database_autovacuum_tuning, autovacuum_message_attachment, attachment_unindex_content4
Sauvegardes et pièces jointesauto_backup, attachment_delete_restrict, mail_cleanup3
Erreurs et sessionsscheduler_error_mailer, sentry, session_db, dbfilter_from_header4
Inventaire et migrationmodule_analysis, upgrade_analysis, module_change_auto_install, base_remote4

Les menus : Paramètres ▸ Technique ▸ Database Size et ses deux vues, Structure de la base de données ▸ Sauvegardes automatisées et Database Autovacuum Tuning, E-mail ▸ Règle de suppression des messages, Paramètres ▸ Upgrade Analysis et ses cinq sous-menus, Paramètres ▸ Remotes, et une section d'analyse sous Applications.

Savoir où part le volume

La question « pourquoi ma base Odoo pèse 40 Go » a presque toujours la même réponse, et ce n'est jamais celle qu'on croit : ce sont les messages, les pièces jointes indexées deux fois, et les lignes mortes qu'un autovacuum mal réglé n'a jamais nettoyées.

database_size mesure et journalise chaque jour la taille de chaque modèle : tables, index, tables de relation, pièces jointes. Deux vues permettent de voir la taille par modèle et de comparer son évolution.

C'est l'outil qui transforme une impression en diagnostic : on voit quel modèle a grossi, et de combien, semaine après semaine.

  • autovacuum_message_attachment (LGPL-3) définit des règles de purge des anciens messages et pièces jointes, sous Paramètres ▸ Technique ▸ E-mail ▸ Règle de suppression des messages.
  • attachment_unindex_content désactive l'indexation du contenu des pièces jointes par Odoo — qui duplique les données entre le fichier et la base.
  • database_autovacuum_tuning (LGPL-3) ajuste les seuils d'autovacuum PostgreSQL sur les tables accumulant trop de lignes mortes.

Le réglage de l'autovacuum est le geste d'administration qui donne le gain le plus spectaculaire sur une instance ancienne : les tables de messages et de mouvements de stock subissent des millions de mises à jour, et les seuils par défaut de PostgreSQL ne sont pas conçus pour cela.

Les sauvegardes et les pièces jointes

auto_backup configure et planifie des sauvegardes automatiques de la base, en local et vers un serveur distant en SFTP — donc à travers un tunnel chiffré. Menu sous Sauvegardes automatisées.

C'est le module à installer sur toute instance qui n'est pas hébergée par un prestataire gérant les sauvegardes. Et même dans ce cas, une sauvegarde applicative supplémentaire ne coûte rien.

  • attachment_delete_restrict restreint la suppression des pièces jointes par niveau. Le standard n'impose aucune restriction : quiconque peut écrire sur un document peut en supprimer les pièces.
  • mail_cleanup ajoute aux serveurs de messagerie entrants la possibilité de marquer comme lus, déplacer ou supprimer les messages plus anciens qu'un nombre de jours donné. Il dépend du module de configuration de messagerie par environnement.

La restriction de suppression des pièces jointes est un contrôle de conservation : une facture fournisseur scannée, supprimée par erreur six mois plus tard, n'existe plus nulle part si la pièce était l'original.

Les erreurs et les sessions

scheduler_error_mailer envoie un courriel quand une action planifiée échoue.

Une action planifiée en échec est silencieuse dans Odoo : elle se désactive au bout de quelques tentatives, et personne ne le sait. La facturation récurrente qui ne part plus, les relances qui ne sortent plus, l'import bancaire qui s'est arrêté : tous se découvrent par leurs conséquences.

sentry connecte le serveur à un service de collecte et d'agrégation d'erreurs : chaque erreur atteignant un niveau de journal donné y est envoyée.

  • session_db (LGPL-3) stocke les sessions HTTP en base PostgreSQL au lieu de fichiers sur disque. Conçu pour les déploiements à plusieurs serveurs, où un utilisateur ne doit pas perdre sa session en changeant de nœud.
  • dbfilter_from_header filtre la liste des bases accessibles à partir d'un en-tête HTTP envoyé par le proxy inverse — nginx, Caddy, Apache —, en complément du filtre de configuration.

Le dernier est la bonne façon de servir plusieurs bases depuis un même serveur : le proxy décide, l'application obéit.

Savoir ce qui est installé

module_analysis analyse le code des modules installés pour savoir combien vient du cœur d'Odoo, de l'OCA, ou de développements internes. Il apporte un référentiel d'auteurs, de types de modules et de règles d'affectation, plus une vue par type.

La proportion de code sur mesure dans une instance est l'indicateur le plus prédictif de son coût de migration. Une instance à 5 % de développement interne monte de version en quelques jours ; à 40 %, c'est un projet.

upgrade_analysis outille la préparation d'une migration : il compare la structure et les données d'une base locale avec celles d'une base distante, et produit les fichiers d'analyse. Cinq sous-menus sous Paramètres ▸ Upgrade Analysis.

  • module_change_auto_install permet de modifier par configuration la liste des modules marqués auto-installables, sans toucher aux manifestes.
  • base_remote enregistre chaque hôte distant qui se connecte au serveur — adresse externe et nom d'hôte s'il est résolvable — dans un modèle consultable sous Paramètres ▸ Remotes.

Le dernier sert au diagnostic et à la sécurité : savoir d'où viennent les connexions est la première chose qu'on regarde après un comportement suspect.

Limites connues

  • Les purges de messages et de pièces jointes sont irréversibles : définir les règles avec la durée de conservation légale en tête, pas avec le volume.
  • attachment_unindex_content désactive la recherche dans le contenu des pièces jointes : c'est le prix du gain de volume.
  • Le réglage de l'autovacuum touche PostgreSQL : à faire avec l'administrateur de base, sur des tables identifiées, pas globalement.
  • auto_backup stocke un mot de passe SFTP dans la configuration, donc dans la base : préférer une authentification par clé si le module le permet, et vérifier les droits sur l'enregistrement.
  • Une sauvegarde applicative n'est pas une sauvegarde système : elle ne contient pas le système de fichiers des pièces jointes si celles-ci sont hors base.
  • sentry envoie des traces d'erreur à un service externe : ces traces peuvent contenir des données. Vérifier la configuration de filtrage et le lieu d'hébergement du service.
  • session_db change le stockage des sessions : une déconnexion générale est à prévoir à l'activation.
  • upgrade_analysis se connecte à une base distante en RPC : à n'utiliser que vers une base de travail, jamais vers une production.

Identité technique

Les seize modules viennent du dépôt OCA server-tools, branche 18.0 — 56 modules au total. Treize sont en AGPL-3, trois en LGPL-3. Les dépendances : base et base_setup pour la plupart, mail pour les sauvegardes, les purges et les alertes, web pour le filtrage de bases et les hôtes distants, mail_environment pour le nettoyage de messagerie. session_db n'a aucune dépendance.

Voir aussi journaliser, tracer et auditer et les briques techniques du serveur pour le reste du dépôt.

Questions fréquentes

Pourquoi ma base Odoo pèse-t-elle 40 Go ?

database_size répond précisément : il mesure et journalise chaque jour la taille de chaque modèle — tables, index, relations, pièces jointes — avec une vue de comparaison. La réponse est presque toujours la même : les messages, les pièces jointes indexées deux fois, et les lignes mortes qu'un autovacuum mal réglé n'a jamais nettoyées.

Comment purger les anciens messages et pièces jointes ?

autovacuum_message_attachment définit des règles de purge sous Paramètres ▸ Technique ▸ E-mail ▸ Règle de suppression des messages. Attention : ces purges sont irréversibles. Définissez les règles avec la durée de conservation légale en tête, pas avec le volume.

Comment savoir qu'une action planifiée a échoué dans Odoo ?

Par défaut, on ne le sait pas : elle se désactive au bout de quelques tentatives, en silence. scheduler_error_mailer envoie un courriel à chaque échec. La facturation récurrente arrêtée, les relances qui ne sortent plus, l'import bancaire interrompu se découvrent sinon par leurs conséquences.

Peut-on sauvegarder une base Odoo automatiquement vers un serveur distant ?

Oui : auto_backup planifie des sauvegardes en local et en SFTP. Deux réserves : le mot de passe SFTP est stocké en base, et une sauvegarde applicative ne contient pas le système de fichiers des pièces jointes si celles-ci sont stockées hors base.

Comment estimer le coût de migration d'une instance Odoo ?

module_analysis analyse le code installé par auteur et par type — cœur Odoo, OCA, développement interne. La proportion de code sur mesure est l'indicateur le plus prédictif : à 5 %, une montée de version prend quelques jours ; à 40 %, c'est un projet. upgrade_analysis outille la préparation elle-même.

Se faire accompagner

L'exploitation d'une instance Odoo se joue sur trois mesures que personne ne met en place au démarrage : la taille par modèle, l'échec des actions planifiées, et la part de code sur mesure. Les trois se posent en une demi-journée et évitent chacune un incident coûteux.

Nous installons donc ces trois mesures dès la mise en service, avec les sauvegardes et les règles de purge, et nous reprenons le réglage de l'autovacuum PostgreSQL sur les tables identifiées. Une base dont on connaît la croissance ne surprend pas. Voir les prestations d'Atalios Consulting ou demander un rappel.

Pour aller plus loin

En résumé

Une instance Odoo qui fonctionne bien pendant deux ans finit par ralentir sans qu'on sache pourquoi : la base a triplé, les pièces jointes sont dupliquées, et une action planifiée échoue en silence depuis trois semaines. Seize modules outillent l'exploitation. Parlons de votre instance.

Documentation OCAOdoo CommunityHébergement

Partager

Fiches connexes

Équipe au travail sur des ordinateurs portables autour d'une table
Le module OCA `account_invoice_en16931` (dépôt `fr-einvoicing`, version 18.0.1.0.0, licence AGPL-3) est le socle qui fabrique le fichier de facture électronique conforme à la norme européenne **EN 16931** : Factur-X (PDF/A-3 avec XML CII embarqué), XML UBL, XML CII ou PDF accompagné d'un UBL — et il ajoute des **contrôles bloquants à la validation** d'une facture client. Les quatre modules qui s'y greffent pour la France, et ce que le socle ne fait pas.
Lire la suite
Documentation OCA, Facturation électronique
Réunion d'approbation autour d'un document de travail
Relevé sur une instance Odoo 18 Community, le module OCA `base_tier_validation` (dépôt `server-ux`, version 18.0.3.5.1, licence AGPL-3) ajoute 1 modèle, 101 champs et 3 menus, mais ne s'active sur aucun document métier par lui-même : il lui faut un module d'implémentation. C'est le point qui surprend le plus — voici ce qu'il fait réellement, et comment le mettre en service.
Lire la suite
Documentation OCA, Odoo