Architecture de PostgreSQL

Module M1

Dalibo SCOP

24.12

18 décembre 2024

Sur ce document

Formation Module M1
Titre Architecture de PostgreSQL
Révision 24.12
PDF https://dali.bo/m1_pdf
EPUB https://dali.bo/m1_epub
HTML https://dali.bo/m1_html
Slides https://dali.bo/m1_slides
TP https://dali.bo/m1_tp
TP (solutions) https://dali.bo/m1_solutions

Licence Creative Commons CC-BY-NC-SA

Cette formation est sous licence CC-BY-NC-SA. Vous êtes libre de la redistribuer et/ou modifier aux conditions suivantes :

  • Paternité
  • Pas d’utilisation commerciale
  • Partage des conditions initiales à l’identique

Marques déposées

PostgreSQL® Postgres® et le logo Slonik sont des marques déposées par PostgreSQL Community Association of Canada.

Versions de PostgreSQL couvertes

Ce document ne couvre que les versions supportées de PostgreSQL au moment de sa rédaction, soit les versions 13 à 17.

Architecture & fichiers de PostgreSQL

PostgreSQL

Au menu

  • Rappels sur l’installation
  • Les processus
  • Les fichiers

Rappels sur l’installation

  • Plusieurs possibilités
    • paquets Linux précompilés
    • outils externes d’installation
    • code source
  • Chacun ses avantages et inconvénients
    • Dalibo recommande fortement les paquets précompilés

Paquets précompilés

  • Paquets Debian ou Red Hat suivant la distribution utilisée
  • Préférence forte pour ceux de la communauté
  • Installation du paquet
    • installation des binaires
    • création de l’utilisateur postgres
    • initialisation d’une instance (Debian seulement)
    • lancement du serveur (Debian seulement)
  • (Red Hat) Script de création de l’instance

Installons PostgreSQL

  • Prenons un moment pour
    • installer PostgreSQL
    • créer une instance
    • démarrer l’instance
  • Pas de configuration spécifique pour l’instant

Processus de PostgreSQL

Architecture de PostgreSQL

Introduction

  • PostgreSQL est :

    • multiprocessus (et non multithread)
    • à mémoire partagée
    • client-serveur

Processus d’arrière-plan

# ps f -e --format=pid,command | grep -E "postgres|postmaster"
  96122 /usr/pgsql-15/bin/postmaster -D /var/lib/pgsql/15/data/
  96123  \_ postgres: logger
  96125  \_ postgres: checkpointer
  96126  \_ postgres: background writer
  96127  \_ postgres: walwriter
  96128  \_ postgres: autovacuum launcher
  96131  \_ postgres: logical replication launcher

(sous Rocky Linux 8)

Processus d’arrière-plan (suite)

  • Les processus présents au démarrage :
    • Un processus père : postmaster
    • background writer
    • checkpointer
    • walwriter
    • autovacuum launcher
    • stats collector (avant v15)
    • logical replication launcher
  • et d’autres selon la configuration et le moment :
    • dont les background workers : parallélisation, extensions…

Processus par client (client backend)

  • Pour chaque client, nous avons un processus :
    • créé à la connexion
    • dédié au client…
    • …et qui dialogue avec lui
    • détruit à la déconnexion
  • Un processus gère une requête
    • peut être aidé par d’autres processus
  • Le nombre de processus est régi par les paramètres :
    • max_connections (défaut : 100) - connexions réservées
    • compromis nombre requêtes actives/nombre cœurs/complexité/mémoire

Gestion de la mémoire

Structure de la mémoire sous PostgreSQL

  • Zone de mémoire partagée :
    • shared buffers surtout
  • Zone de chaque processus
    • tris en mémoire (work_mem)

Fichiers

  • Une instance est composée de fichiers :
    • Répertoire de données
    • Fichiers de configuration
    • Fichier PID
    • Tablespaces
    • Statistiques
    • Fichiers de trace

Répertoire de données

postgres$ ls $PGDATA
base              pg_ident.conf  pg_stat      pg_xact
current_logfiles  pg_logical     pg_stat_tmp  postgresql.auto.conf
global            pg_multixact   pg_subtrans  postgresql.conf
log               pg_notify      pg_tblspc    postmaster.opts
pg_commit_ts      pg_replslot    pg_twophase  postmaster.pid
pg_dynshmem       pg_serial      PG_VERSION
pg_hba.conf       pg_snapshots   pg_wal
  • Une seule instance PostgreSQL doit y accéder !

Fichiers de configuration

  • postgresql.conf ( + fichiers inclus)
  • postgresql.auto.conf
  • pg_hba.conf ( + fichiers inclus (v16))
  • pg_ident.conf (idem)

Autres fichiers dans PGDATA

  • PG_VERSION : fichier contenant la version majeure de l’instance
  • postmaster.pid
    • nombreuses informations sur le processus père
    • fichier externe possible, paramètre external_pid_file
  • postmaster.opts

Fichiers de données

  • base/ : contient les fichiers de données
    • un sous-répertoire par base de données
    • pgsql_tmp : fichiers temporaires
  • global/ : contient les objets globaux à toute l’instance

Fichiers liés aux transactions

  • pg_wal/ : journaux de transactions
    • pg_xlog/ avant la v10
    • sous-répertoire archive_status
    • nom : timeline, journal, segment
    • ex : 00000002 00000142 000000FF
  • pg_xact/ : état des transactions
    • pg_clog/ avant la v10
  • mais aussi : pg_commit_ts/, pg_multixact/, pg_serial/ pg_snapshots/, pg_subtrans/, pg_twophase/
  • Ces fichiers sont vitaux !

Fichiers liés à la réplication

  • pg_logical/
  • pg_repslot/

Répertoire des tablespaces

  • pg_tblspc/ : tablespaces
    • si vraiment nécessaires
    • liens symboliques ou points de jonction
    • totalement optionnels

Fichiers des statistiques d’activité

Statistiques d’activité :

  • stats collector (≤v14) & extensions
  • pg_stat_tmp/ : temporaires
  • pg_stat/ : définitif

Autres répertoires

  • pg_dynshmem/
  • pg_notify/

Les fichiers de traces (journaux)

  • Fichiers texte traçant l’activité
  • Très paramétrables
  • Gestion des fichiers soit :
    • par PostgreSQL
    • délégués au système d’exploitation (syslog, eventlog)

Résumé

Architecture de PostgreSQL

Conclusion

  • PostgreSQL est complexe, avec de nombreux composants

  • Une bonne compréhension de cette architecture est la clé d’une bonne administration.

  • Pour aller (beaucoup) plus loin :

Questions

N’hésitez pas, c’est le moment !

Quiz

Installation de PostgreSQL depuis les paquets communautaires

Travaux pratiques

Processus

Fichiers

Travaux pratiques (solutions)