Exploitation
Exécution d’une instance
Une instance de PostgreSQL correspond à l’exécution d’un processus postgres. Ce processus accueille les connexions des clients et ouvre un nouveau processus postgres pour chaque connexion réussie. D’autres processus postgres sont lancés au démarrage par le processus parent, pour différentes tâches. Un processus a la charge de l’écriture des données, et un autre celle de la récupération des statistiques, comme dans le résultat de la commande ps suivante :
$ ps fx
32460 ? S 0:01 /usr/lib/postgresql/10/bin/postgres -D
/var/lib/postgresql/10/main -c
config_file=/etc/postgresql/10/main/postgresql.conf
32462 ? Ss 0:00 \_ postgres: 10/main: checkpointer process
32463 ? Ss 0:00 \_ postgres: 10/main: writer process
32464 ? Ss 0:00 \_ postgres: 10/main: wal writer process
32465 ? Ss 0:01 \_ postgres: 10/main: autovacuum launcher
process
32466 ? Ss 0:01 \_ postgres: 10/main: stats collector process
32467 ? Ss 0:00 \_ postgres: 10/main: bgworker: logical
replication launcher ...
Administration du serveur
1. Configuration
Le fichier de configuration propre à chaque instance de PostgreSQL se nomme postgresql.conf et se situe généralement dans le répertoire initialisé avec l’instance, correspondant à l’option -D de la commande initdb. Dans le cas des systèmes Debian, il se situe dans le répertoire /etc/postgresql/ suivi de la version majeure de PostgreSQL et du nom de l’instance choisie.
Le fichier postgresql.conf peut contenir des directives include et include_dir qui peuvent faire référence à d’autres fichiers contenant divers directives. Par défaut, ces deux directives ne sont pas utilisées.
Le fichier postgresql.auto.conf est toujours situé dans le répertoire des données et contient les paramètres modifiés par la commande ALTER SYSTEM. Ce fichier est toujours lu en dernier, ce qui fait que les paramètres présents surchargent les mêmes paramètres présents dans les autres fichiers de configuration.
Ces fichiers rassemblent les directives de configuration permettant d’adapter le comportement du serveur au matériel sur lequel il fonctionne, ainsi qu’aux bases de données utilisées. Certaines de ces directives peuvent être surchargées par la commande SET une fois le serveur démarré, ou associées à une base de données ou à un rôle, avec les commandes ALTER respectives. Les directives peuvent être soit définies au démarrage, soit pendant l’exécution du serveur ou soit avec un simple rechargement du fichier de configuration.
Les directives indiquant une valeur de taille mémoire ou de durée peuvent être exprimées en utilisant une unité, simplifiant ainsi l’écriture et la relecture du fichier de configuration.
Les unités de taille sont : KB, MB, GB. Les unités de temps sont : ms, s, min, h, d.
Les paramètres de configuration sont dotés de valeurs par défaut, qui peuvent être revues notamment en fonction du matériel réellement utilisé.
Lorsque les modifications sont apportées dans le fichier de configuration, elles ne sont pas prises en compte sans intervention de l’administrateur. Il faut que l’instance PostgreSQL...
Gestionnaire de connexions
Le gestionnaire de connexions travaille entre les applications clientes et le serveur de bases de données. Sa principale tâche est de gérer l’ouverture des connexions au serveur de bases de données à la place des applications clientes. Cette gestion va, de fait, maintenir les connexions ouvertes dans le serveur de bases de données, et permettre aux applications clientes de les réutiliser plus facilement. De fait, cette gestion d’un réservoir de connexions permet d’économiser le temps d’ouverture d’une connexion au serveur de bases de données, et donc d’économiser des ressources. En effet, l’ouverture d’une connexion dans PostgreSQL entraîne la création d’un nouveau processus, qui est une opération coûteuse. Cette économie de ressources, et donc de temps, permet une meilleure montée en charge des applications utilisant un serveur de bases de données PostgreSQL.
Le gestionnaire de connexions peut être executé dans un système indépendant de celui où fonctionne le serveur de bases de données. Il n’existe pas de règle toute faite, le choix se fait en fonction de la topologie existante entre les applications clientes et les serveurs de bases données, et en fonction de la résilience souhaitée de l’ensemble. Par exemple, si l’on souhaite que le gestionnaire de bases de données participe aux mécanismes de haute disponibilité de l’application, il est opportun de ne pas l’éxécuter dans le même système que le serveur de bases de données, mais plutôt dans le système où fonctionnent les applications clientes.
Certains serveurs d’applications intègrent de fait un gestionnaire de connexions, comme J2E ou Node.js, ce qui rend inutile l’adoption d’un tel outil. À l’inverse, les langages, par exemple PHP, n’intégrant pas cette fonctionnalité, bénéficeront de ces outils.
1. Pgpool
Le gestionnaire de connexions Pgpool est un outil externe à PostgreSQL. Il n’est pas fourni par le groupe PostgreSQL mais fait partie des projets de l’écosystème PostgreSQL.
Le rôle de PgPool est de s’insérer...
Sauvegardes et restauration
Il existe deux méthodes de sauvegarde des données avec PostgreSQL. La première est la sauvegarde logique se situant au niveau des objets contenus dans la base de données, et dont le résultat consiste en un ensemble d’instructions permettant de reconstituer les objets et les données. La deuxième est la sauvegarde physique se situant au niveau des fichiers, ignorant complètement le sens des données contenues, mais permettant une grande finesse de restauration, en termes d’évolution dans le temps.
1. Sauvegardes logiques avec pg_dump et pg_dumpall
Les stratégies de sauvegarde à chaud des bases de données doivent impérativement prendre en compte la restauration de ces données.
Il existe deux outils pour réussir une sauvegarde logique avec chacun leurs particularités et leurs options. Le choix du bon outil et des bonnes options détermine la qualité et la rapidité de la restauration. Il est donc important d’avoir planifié les bonnes sauvegardes, avec les bons formats et de connaître à l’avance les méthodes de restauration adaptées.
a. pg_dump
pg_dump est un outil en ligne de commande livré avec PostgreSQL et donc disponible avec toutes les versions du serveur. Il est l’outil le plus complet et le plus souple pour réaliser les sauvegardes logiques. L’unité de sauvegarde est typiquement la base de données, mais il est possible de ne sauvegarder qu’un schéma, voire une seule table.
L’outil propose plusieurs formats de sauvegarde qui ont chacun leurs intérêts et leurs inconvénients. Le format le plus classique est le format texte, qui est en fait un fichier de commandes SQL permettant de recréer les objets et d’insérer les données avec des requêtes SQL classiques. L’avantage de ce format est une plus grande souplesse à la restauration des données, lors d’un changement de version de PostgreSQL, ou par exemple pour utiliser ces données dans d’autres serveurs SGBD. Les formats binaires, spécifiques à PostgreSQL, offrent plus de souplesse, notamment au moment de l’insertion des données. Le choix du format détermine la méthode de restauration : le format texte...
Exploitation et tâches de maintenance
Une fois la base de données installée et les applications connectées, il est nécessaire de suivre l’activité de l’instance. En effet, une base de données évolue dans le temps, notamment avec les insertions de données, les mises à jour et les suppressions de données.
Il est nécessaire de comprendre son fonctionnement et de réagir en conséquence.
1. Analyse d’une requête avec EXPLAIN
La commande EXPLAIN permet d’étudier le comportement d’une requête et notamment les différentes méthodes utilisées par PostgreSQL pour accéder aux données.
Le plan d’exécution détaille le parcours des tables et permet, par exemple, de comprendre où ajouter un index sur une table. Il affiche aussi les algorithmes utilisés pour les jointures et les coûts estimés d’exécution, exprimés en unités de récupération sur des pages sur disque.
L’option ANALYZE exécute réellement la requête, et ajoute le temps réel d’exécution et le nombre réel de lignes retournées.
Le synopsis de la commande est le suivant :
EXPLAIN <options> requete ;
où <options> peut être :
( ANALYZE <booléen>, BUFFERS <booléen>, COSTS <booléen>,
TIMING <booléen>,FORMAT { TEXT | XML | JSON | YAML } )
-
ANALYZE exécute réellement la requête et collecte les informations d’exécution.
-
BUFFERS ajoute des informations sur les tampons de données utilisés.
-
COSTS, affiché par défaut, affiche l’estimation des coûts.
-
TIMING affiche les chronométrages de l’exécution.
Voici par exemple une simple requête de lecture avec un filtre sur la clé primaire de la table prestations. Ici, la table a très peu de tuples, le planificateur de requêtes ne juge donc pas nécessaire d’utiliser l’index de la clé primaire et effectue une lecture séquentielle de la table :
clients=# EXPLAIN SELECT * FROM prestations
where prest_id = 32 ;
QUERY...
Test de l’installation avec pgbench
L’utilitaire pgbench, qui est livré dans les contributions de PostgreSQL, permet de tester une installation en évaluant un nombre de transactions par seconde. Ceci permet ainsi de mesurer les améliorations apportées par un changement dans la configuration.
Il utilise une base de données, dans laquelle il crée des tables et les remplit avec des données, dont la quantité est précisée à l’initialisation. Puis, lors de la phase de test, pgbench envoie des transactions et compte le nombre de transactions par seconde, en fonction de différents paramètres comme le nombre de connexions ou le nombre de transactions concurrentes.
Les tests peuvent se dérouler dans une base de données dédiée, nommée pgbench créée avec la commande suivante :
[postgres] $ createdb pgbench
Puis, la commande suivante permet d’initialiser la base pour les tests :
[postgres] $ pgbench -i -s 10 pgbench
L’option -i active l’initialisation et l’option -s est un facteur multipliant, permettant d’insérer plus de données, ici avec un facteur 10.
Ensuite, le test peut être lancé avec la commande suivante :
[postgres] $ pgbench -c 10 -t 30 pgbench
starting vacuum...end.
transaction type: TPC-B (sort of)
scaling factor: 10
number of clients:...
Exploitation des traces d’activités avec pgBadger
Le logiciel pgBadger est un script Perl permettant d’analyser le contenu des fichiers de traces d’activité, pour en extraire des données statistiques. Ceci permet d’évaluer le comportement de PostgreSQL, par exemple le nombre d’ordres d’insertion ou de mise à jour.
1. Installation
L’outil est empaqueté dans différentes distributions GNU/Linux, mais peut être installé en suivant les instructions indiquées dans la documentation de l’outil, à l’adresse suivante : http://dalibo.github.io/pgbadger/
La procédure d’installation est alors extrêmement simple et ne nécessite que la commande perl, qui est déjà présente sur un système GNU/Linux :
$ tar xf pgbadger-6.2.tar.gz
$ cd pgbadger-6.2
$ perl Makefile.PL
$ make && sudo make install
2. Analyse des fichiers de traces
Le fichier de traces d’activité contient un certain nombre d’informations, selon les réglages effectués. L’outil pgBadger est en mesure de comprendre le format des fichiers de traces, et est donc simple à manipuler, même si le temps d’analyse des fichiers de traces peut être long et consommer des ressources sur la machine sur laquelle l’analyse est exécutée.
La commande...