Nouveautés de PostgreSQL 13

PGSession 13

Dalibo & Contributors

Nouveautés de PostgreSQL 13

La v13

  • Développement depuis le 1er juillet 2019
  • Sortie le 24 septembre 2020
  • version 13.1 sortie le 12 novembre 2020

Les nouveautés

  • Administration
  • Réplication physique et logique
  • Supervision
  • Performances
  • Régressions / changements
  • Ateliers

Administration

  • Maintenance :
    • parallélisation des vacuum et reindex
    • Autovacuum : déclenchement par INSERT
  • Création d’un fichiers manifeste par pg_basebackup
  • Déconnexion des utilisateurs à la suppression d’une base de données

VACUUM : nouveaux workers

  • VACUUM peut paralléliser le traitement des index
  • Nouvelle option PARALLEL
    • si 0, non parallélisé
  • La table doit avoir :
    • au minimum deux index
    • des index d’une taille supérieure à min_parallel_index_scan_size
  • Non disponible pour le VACUUM FULL

vacuumdb –parallel

  • Nouvelle option --parallel (-P)
  • Utilisé pour la nouvelle clause PARALLEL de VACUUM
  • À ne pas confondre avec l’option --jobs

reindexdb –jobs

  • Nouvelle option --jobs (-j) pour reindexdb
  • Lance autant de connexions sur le serveur PostgreSQL
  • Exécute un REINDEX par connexion
  • Incompatible avec les options SYSTEM et INDEX

Autovacuum : déclenchement par INSERT

  • Avant PostgreSQL v13 :
    • des INSERTs déclenchent un ANALYZE automatique
    • mais pas de VACUUM
  • VACUUM important pour les VM et FSM
  • Deux nouveaux paramètres :
    • autovacuum_vacuum_insert_threshold
    • autovacuum_vacuum_insert_scale_factor

Fichiers manifeste pour les sauvegardes

Fichiers manifestes

  • pg_basebackup crée une liste des fichiers présents dans les sauvegardes : le fichier manifeste.

  • Trois nouvelles options :

    • --no-manifest
    • --manifest-force-encode
    • --manifest-checksums=[NONE|CRC32C|SHA224|SHA256|SHA384|SHA512]

Nouvel outil pg_verifybackup

  • Fonction : vérifier une sauvegarde au format plain grâce au fichier manifeste.

  • 4 étapes :

    • vérification de la présence du manifeste et de sa somme de contrôle
    • vérification de la présence des fichiers écrits dans le manifeste
    • vérification des sommes de contrôle des fichiers présents dans le manifeste
    • vérification des WALs (présence, somme de contrôle des enregistrements)
  • Ne dispense pas de tester les sauvegardes en les restaurant !

Déconnexion des utilisateurs à la suppression d’une base de données

  • Nouvelle clause WITH FORCE pour DROP DATABASE
  • Force la déconnexion des utilisateurs
  • Nouvel argument --force pour l’outil dropdb

Réplication physique

  • Modification à chaud des paramètres de réplication
  • Volume maximal de journaux conservé par les slots
  • Évolution dans la commande pg_rewind :
    • Restauration de WAL archivés via le paramètre --restore-target-wal
    • Génération de la configuration de la réplication
    • Récupération automatique d’une instance

pg_rewind sait restaurer des journaux

  • -c/--restore-target-wal permet de restaurer les archives de journaux de transactions de l’instance cible.

pg_rewind récupère automatiquement une instance

  • pg_rewind lance automatiquement la phase de récupération du serveur cible si nécessaire avant son traitement.
  • il est possible de désactiver ce nouveau comportement avec --no-ensure-shutdown.

pg_rewind génère la configuration de réplication

  • --write-recovery-conf permet de générer le fichier standby.signal et configure la connexion à l’instance primaire dans postgresql.auto.conf ;
  • nécessite de préciser l’argument --source-server

Réplication logique

Il est désormais possible de :

  • ajouter une table partitionnée à une publication
  • répliquer vers une table partitionnée
  • répliquer depuis la racine d’une table partitionnée (option publish_via_partition_root)
    • en cas de partitionnement différent sur la cible

Supervision

  • Journaux applicatifs :
    • Tracer un échantillon des transactions suivant leur durée
    • Tracer le type de processus
  • Suivi de l’avancée des ANALYZE
  • Suivi de l’avancée des sauvegardes par pg_basebackup
  • Statistiques d’utilisation des WAL

Tracer un échantillon des requêtes suivant leur durée

  • log_min_duration_sample : durée minimum requise pour qu’une requête échantillonnée puisse être tracée.
  • log_statement_sample_rate : probabilité qu’une requête durant plus de log_min_duration_sample soit tracée.
  • priorité de log_min_duration_statement sur log_min_duration_sample.

Tracer le type de processus

  • Ajout d’un nouvel échappement (%b) à log_line_prefix pour tracer le type de backend.
  • Le type de backend est également ajouté aux traces formatées en csv.

Suivi de l’exécution des ANALYZE

  • Nouvelle vue pg_stat_progress_analyze

Suivi de l’exécution des sauvegardes

  • Nouvelle vue : pg_stat_progress_basebackup

  • Permet de surveiller :

    • la phase de la sauvegarde ;
    • la volumétrie sauvegardée et restant à sauvegarder ;
    • le nombre de tablespaces sauvegardés et restant à sauvegarder.

Statistiques d’utilisation des WAL

Objectifs

  • Mesurer l’impact des écritures dans les WAL sur les performances ;
  • Statistiques calculées :
    • nombre d’enregistrements écrits dans les WAL ;
    • quantité de données écrites dans les WAL ;
    • nombre d’écritures de pages complètes.

pg_stat_statements : informations sur les WAL

Nouvelles colonnes :

  • wal_bytes : volume d’écriture dans les WAL en octets
  • wal_records : nombre d’écritures dans les WAL
  • wal_fpi : nombre d’écritures de pages complètes dans les WAL.

EXPLAIN : affichage des WAL

  • EXPLAIN :
    • ANALYZE : prérequis
    • WAL : affiche les statistiques d’utilisation des WAL
  Insert on test (actual time=3.231..3.231 rows=0 loops=1)
   WAL: records=1000 bytes=65893

auto_explain : affichage des WAL

  • auto_explain.log_analyze : prérequis
  • auto_explain.log_wal : affiche les statistiques d’utilisation des journaux de transactions dans les plans
  • équivalent de l’option WAL de EXPLAIN

autovacuum : affichage des WAL

  • statistiques d’utilisation des WAL ajoutées dans les traces de l’autovacuum.
        WAL usage: 120 records, 3 full page images, 27935 bytes

Performances

  • Optimisation du stockage des B-Tree
  • Tri incrémental

Optimisation du stockage des B-Tree

Objectifs

  • Réduction du volume d’un index en ne stockant qu’une seule fois chaque valeur
  • Gain en espace disque et en performance en lecture
  • Implémentation paresseuse : pas de perte de performance en écriture

Nouveaux éléments

  • Nouvelles colonnes visibles avec l’extension pageinspect
  • Champ allequalimage dans bt_metap()
    • si true : possibilité de déduplication
  • Champs htid et tids dans bt_page_items()
    • utilisés pour stocker tous les tuples indexés pour une valeur donnée

Limitation

  • Déduplication non disponible pour plusieurs types de colonnes :

    • les types text, varchar et char si une collation non-déterministe est utilisée
    • le type numeric et par extension les types float4, float8 et jsonb
    • les types composites, tableau et intervalle
    • les index couvrants (mot clé INCLUDE)

Tri incrémental

  • Nouveau nÅ“ud Incremental Sorting
  • Profiter des index déjà présents
  • Trier plus rapidement
    • notamment en présence d’un LIMIT

Régressions / changements

  • wal_keep_segments devient wal_keep_size
  • Changement d’échelle du paramètre effective_io_concurrency

Futur (version 14)

  • Amélioration des performances avec plusieurs milliers de connexions
  • scram-sha-256 pourrait devenir l’encodage de mot de passe par défaut

Ateliers

  • Installation de PostgreSQL 13
  • Monitoring : nouvelle colonne dans pg_stat_activity
  • Nouveauté dans les index b-tree
  • Nouveautés au niveau du backup
  • Nouveautés dans pg_rewind
  • Nouveauté dans la réplication logique