1 points par GN⁺ 2025-12-24 | Aucun commentaire pour le moment. | Partager sur WhatsApp
  • PostgreSQL 18 peut cloner une base de données presque instantanément en combinant la stratégie de copie de fichiers (FILE_COPY) avec les fonctionnalités de clonage du système de fichiers
  • Avec le nouveau paramètre file_copy_method = clone, il est possible d’exploiter les capacités de clonage des systèmes de fichiers modernes (FICLONE) comme XFS, ZFS et APFS
  • Selon les benchmarks, pour le clonage d’une base de données de 6 Go, la méthode existante WAL_LOG prend environ 67 secondes, tandis que la méthode par clonage descend à environ 0,2 seconde
  • Les bases clonées partagent au départ les mêmes blocs physiques, puis se séparent via le mécanisme copy-on-write lors des écritures
  • En revanche, le clonage n’est possible qu’en l’absence de connexions actives et ne fonctionne qu’au sein d’un même système de fichiers

Structure de clonage basée sur les templates dans PostgreSQL

  • Dans PostgreSQL, la commande CREATE DATABASE dbname crée en interne une nouvelle base en clonant la base template1
    • Cela correspond au même comportement que CREATE DATABASE dbname TEMPLATE template1
  • Il est possible d’indiquer une autre base à la place de template1, ce qui permet le clonage via des templates personnalisés
  • Dans PostgreSQL 18, ce système de templates a été étendu vers une architecture permettant un clonage instantané

CREATE DATABASE ... STRATEGY

  • Depuis PostgreSQL 15, le paramètre CREATE DATABASE ... STRATEGY permet de choisir la méthode de clonage
    • La valeur par défaut est WAL_LOG, qui effectue une réplication bloc par bloc via le Write-Ahead Log
    • Cette méthode réduit la charge I/O et améliore la prise en charge de la concurrence, mais elle reste lente pour les gros clonages
  • En spécifiant STRATEGY=FILE_COPY, il est possible de revenir à la méthode traditionnelle de copie de fichiers ; PostgreSQL 18 y ajoute une nouvelle option de clonage

FILE_COPY et file_copy_method

  • Le paramètre file_copy_method de PostgreSQL 18 contrôle la méthode de clonage de fichiers au niveau du système d’exploitation
    • La valeur par défaut est copy, qui lit tous les octets et les réécrit à un nouvel emplacement
    • En passant à clone, PostgreSQL utilise la fonctionnalité de clonage du système de fichiers (FICLONE) pour réaliser un clonage instantané sans consommation d’espace supplémentaire
  • Systèmes de fichiers pris en charge : XFS, ZFS, APFS, FreeBSD ZFS
  • Procédure de configuration
    • Déployer le cluster PostgreSQL sur l’un de ces systèmes de fichiers
    • Définir file_copy_method = clone, puis recharger la configuration

Résultats des benchmarks

  • Après la création d’une base de test d’environ 6 Go (source_db), deux méthodes ont été comparées
    • Méthode WAL_LOG : 67 000 ms (environ 67 secondes)
    • Méthode FILE_COPY + clone : 212 ms
  • À volume de données identique, on observe un gain de performance supérieur à 300x
  • La base clonée (fast_clone) n’utilise quasiment pas d’espace disque supplémentaire

Principe de fonctionnement des données clonées

  • Avec file_copy_method = clone, seules les métadonnées du système de fichiers sont dupliquées, ce qui fait que les deux bases partagent les mêmes blocs physiques
  • La taille de base remontée par PostgreSQL reste la même taille logique (environ 6 Go)
  • Lorsqu’une écriture survient, le mécanisme copy-on-write (COW) s’active et sépare les pages concernées
    • La page contenant les lignes modifiées
    • La page où de nouveaux tuples sont écrits
    • Les pages d’index ainsi que les pages FSM et visibility map, entre autres
  • L’exécution de VACUUM provoque également des séparations de pages supplémentaires

Vérification des blocs partagés sur XFS

  • La commande filefrag -v permet de vérifier si deux bases partagent les mêmes blocs physiques
    • À l’état initial, toutes les extents sont marquées shared
    • Après mise à jour de quelques lignes, les 40 premiers blocs (environ 160 Ko) sont séparés et passent à des adresses physiques différentes
    • Les autres extents restent partagées

Points d’attention et limites

  • Aucune connexion active ne doit exister sur la base source au moment du clonage
    • Il s’agit d’une contrainte de PostgreSQL, et non d’un problème du système de fichiers
    • En production, il est courant d’utiliser une base template dédiée
  • Le clonage n’est possible qu’au sein d’un seul système de fichiers
    • Si plusieurs tablespaces sont répartis sur différents points de montage, PostgreSQL revient à une copie classique
  • Dans les services cloud managés (AWS RDS, Google Cloud SQL, etc.), l’accès au système de fichiers n’est pas possible, donc cette fonctionnalité ne peut pas être utilisée
    • En revanche, dans un environnement VM autogéré ou bare metal, un contrôle complet reste possible

Conclusion

  • La fonctionnalité file_copy_method = clone de PostgreSQL 18 exploite directement les capacités de clonage au niveau du système d’exploitation pour
    réduire de façon spectaculaire le temps de clonage de bases de données volumineuses
  • Elle permet de mettre en place des workflows de bases de données clonables et réinitialisables instantanément pour les environnements de test, de développement et d’apprentissage
  • Il reste toutefois nécessaire de concevoir l’exploitation en tenant compte de la contrainte sur les connexions actives et de la limitation à un système de fichiers unique

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.