# Postgresql - Paramétrage (tuning)

### Base de fonctionnement de Postgresql

Postgresql fonctionne avec deux répertoires fondamentaux :

- `/etc/postgresql/__VERSION__/main` : Répertoire de paramétrage
- `/var/lib/postgresql/10/main` : répertoire qui contient les bases de données

Côté configuration, la liste des fichiers principaux est la suivante :

<table border="1" id="bkmrk-conf.d-dossier-%C2%A0-%C2%A0" style="border-collapse: collapse; width: 100.002%; height: 217px;"><tbody><tr><td class="align-center" style="width: 16.5833%;">**Nom**</td><td class="align-center" style="width: 57.7292%;">**Description**

</td><td class="align-center" style="width: 43.3726%;">**Usage dans GRAP**</td></tr><tr style="height: 31px;"><td style="width: 16.5833%; height: 31px;">`conf.d/`</td><td style="width: 57.7292%; height: 31px;">Répertoire de fichier de configuration, appelé par défaut dans le fichier `postgresql.conf` (clé `include_dir`).

Tous les fichiers finissant par `.conf`, présents dans ce dossier seront chargés au démarrage.

</td><td style="width: 43.3726%; height: 31px;">Dépôt d'un fichier `grap.conf` par ansible</td></tr><tr style="height: 31px;"><td style="width: 16.5833%; height: 31px;">`environment`</td><td style="width: 57.7292%; height: 31px;">?</td><td style="width: 43.3726%; height: 31px;">valeur par défaut</td></tr><tr style="height: 31px;"><td style="width: 16.5833%; height: 31px;">`pg_ctl.conf`</td><td style="width: 57.7292%; height: 31px;">?</td><td style="width: 43.3726%; height: 31px;">valeur par défaut</td></tr><tr style="height: 31px;"><td style="width: 16.5833%; height: 31px;">`pg_hba.conf`</td><td style="width: 57.7292%; height: 31px;">Indique comment l'authentification a lieu</td><td style="width: 43.3726%; height: 31px;">valeur par défaut</td></tr><tr style="height: 31px;"><td style="width: 16.5833%; height: 31px;">`pg_ident.conf`</td><td style="width: 57.7292%; height: 31px;">Mapping d'utilisateur</td><td style="width: 43.3726%; height: 31px;">valeur par défaut</td></tr><tr style="height: 31px;"><td style="width: 16.5833%; height: 31px;">`postgresql.conf`</td><td style="width: 57.7292%; height: 31px;">**Fichier principal de configuration Postgresql**</td><td style="width: 43.3726%; height: 31px;">valeur par défaut</td></tr><tr style="height: 31px;"><td style="width: 16.5833%; height: 31px;">`start.conf`</td><td style="width: 57.7292%; height: 31px;">?</td><td style="width: 43.3726%; height: 31px;">valeur par défaut</td></tr></tbody></table>

**référence :**

- Les différents fichiers de configuration : [https://docs.postgresql.fr/9.5/runtime-config-file-locations.html](https://docs.postgresql.fr/9.5/runtime-config-file-locations.html)
- Le chargement des fichiers de configuration :[https://www.postgresql.org/docs/9.3/config-setting.html](https://www.postgresql.org/docs/9.3/config-setting.html) (18.1.5 Configuration File Includes)

### Configuration d'un nouveau serveur

#### Récupération des caractéristiques du serveur cible

<table border="1" id="bkmrk-information-requ%C3%AAte" style="border-collapse: collapse; width: 100%; height: 161px;"><tbody><tr style="height: 31px;"><td class="align-center" style="width: 38.642%; height: 31px;">**Information**</td><td class="align-center" style="width: 61.358%; height: 31px;">**Requête**</td></tr><tr style="height: 31px;"><td style="width: 38.642%; height: 31px;">Version majeure de postgresql</td><td style="width: 61.358%; height: 31px;">`sudo su postgres -c "psql -c 'SELECT version()';"`</td></tr><tr style="height: 31px;"><td style="width: 38.642%; height: 31px;">Mémoire totale disponible sur le serveur</td><td style="width: 61.358%; height: 31px;">`free -m`</td></tr><tr style="height: 31px;"><td style="width: 38.642%; height: 31px;">Mémoire allouée à un worker Odoo</td><td style="width: 61.358%; height: 31px;">`vim /opt/grap-voodoo/etc/openerp.cfg`

clé `limit_memory_hard` dans le fichier divisé par 1024\*1024

</td></tr><tr style="height: 37px;"><td style="width: 38.642%; height: 37px;">Nombre de workers de Odoo</td><td style="width: 61.358%; height: 37px;">`vim /opt/grap-voodoo/etc/openerp.cfg`

clé `max_cron_threads` (pour les workers de cron, ou 1 si nul)

clé `workers` (pour les workers pour les utilisateurs, ou 1 si nul)

</td></tr><tr><td style="width: 38.642%;">mémoire allouée à Odoo</td><td style="width: 61.358%;">**mémoire alloué à un worker** \* **nombre de workers**

</td></tr><tr><td style="width: 38.642%;">Nombre de CPU</td><td style="width: 61.358%;">`nproc`

</td></tr><tr><td style="width: 38.642%;">Nombre de connexion maximum</td><td style="width: 61.358%;">~ (Nb activités du GRAP \* 3) + Nb membres équipe interne

</td></tr></tbody></table>

#### Génération du fichier de configuration postgresql

- aller sur [https://pgtune.leopard.in.ua](https://pgtune.leopard.in.ua)
- Renseigner les données suivantes précédentes en mettant "**DB Type**" à la valeur "**Web application**"
- Se connecter au serveur cible et executer `SHOW ALL;` pour comparer avec les valeurs actuelles de production

#### Déploiement via ansible

- Ouvrir le fichier `/config/postgresql/cfg_postgresql_{{ansible_hostname}}.cfg`
- Y copier le contenu du fichier précédemment généré (ou
- Paramétrer le fichier `host.ini` pour cibler le ou les serveurs cibles
- Executer `ansible-playbook -i host.ini ./playbook_of_tasks/p_postgresql_install.yml`

**Référence :**

- configuration de Odoo : [https://www.odoo.com/documentation/12.0/setup/deploy.html#builtin-server](https://www.odoo.com/documentation/12.0/setup/deploy.html#builtin-server)

### requêtes en lecture utiles

<table border="1" id="bkmrk-requ%C3%AAte-description" style="border-collapse: collapse; width: 100%;"><tbody><tr><td class="align-center" style="width: 67.1605%;">**Requête**</td><td class="align-center" style="width: 32.8395%;">**Description**</td></tr><tr><td style="width: 67.1605%;">`SELECT<br></br>    tablename,<br></br>    pg_total_relation_size(schemaname || '.' || tablename),<br></br>    pg_size_pretty(pg_total_relation_size(schemaname || '.' || tablename))<br></br>FROM pg_tables order by 2 desc;`</td><td style="width: 32.8395%;">Tables et tailles associées, classées par taille décroissantes.</td></tr><tr><td style="width: 67.1605%;">`SHOW ALL;`</td><td style="width: 32.8395%;">Affiche les paramètres de configuration actuellement actif en production.</td></tr><tr><td style="width: 67.1605%;">`select pg_size_pretty(pg_database_size('DATABASE_NAME'));`</td><td style="width: 32.8395%;">Taille de la base de données</td></tr><tr><td style="width: 67.1605%;"> </td><td style="width: 32.8395%;"> </td></tr></tbody></table>