Nouveautés de PostgreSQL 12

Workshop 12

Dalibo & Contributors

Nouveautés de PostgreSQL 12

Les nouveautés

  • Développement SQL
  • Partitionnement
  • Réplication
  • Monitoring
  • Administration
  • Performances : index
  • Incompatibilités
  • Fonctionnalités futures
  • Ateliers

Développement / SQL

  • Colonnes générées
  • Colonne OID
  • COMMIT ou ROLLBACK AND CHAIN
  • COPY FROM WHERE

Ajout du support des colonnes générées

  • Colonnes générées par une expression
  • Valeur assignée à l’écriture et consignée dans la table ( STORED )
  • Plus efficace qu’un trigger
  • Colonne en lecture seule (sauf mot clé DEFAULT)
  • Colonnes indexables
  • Mode VIRTUAL non supporté

Restriction

  • Expression IMMUTABLE

Visibilité de la colonne OID

  • La fin des OID
    • anomalies de restauration possible

COMMIT AND CHAIN

  • COMMIT AND CHAIN
  • ROLLBACK AND CHAIN
  • Enchaîne les transactions avec les mêmes caractéristiques

COPY FROM WHERE…

  • Filtrer l’import massif de données

    COPY FROM... WHERE...

Partitionnement

  • Support des clés étrangères
  • Définition du tablespace pour les partitions
  • Fonctions d’information :
    • pg_partition_root()
    • pg_partition_ancestors()
    • pg_partition_tree()
  • Nouvelle commande \dP pour les partitions

Clés étrangères dans les tables partitionnées

  • Support des clés étrangères entre tables partitionnées

Définition du tablespace pour les partitions

  • Gestion des tablespaces pour les tables partitionnées
    • Propagation du tablespace aux partitions filles
    • Surcharge du tablespace par partitions filles

Fonctions d’information sur le partitionnement

  • pg_partition_root(regclass)
  • pg_partition_ancestors(regclass)
  • pg_partition_tree(regclass)

Commande psql pour les tables partitionnées

  • Commande \dP[tin+] [PATTERN]

Réplication

  • Nouveauté des postgresql.confet recovery.conf
  • 2 fichiers trigger
  • Paramètres modifiables à chaud
  • Fonction pg_promote()
  • Copie de slot de réplication

Nouveauté de postgresql.conf et recovery.conf

  • recovery.conf disparaît
  • Tous les paramètres dans postgresql.conf

2 fichiers trigger

  • standby.signal
  • recovery.signal

Paramètres modifiables à chaud

  • archive_cleanup_command
  • recovery_end_command
  • recovery_min_apply_delay
  • promote_trigger_file

Fonction pg_promote()

  • pg_promote

Copie de slot de réplication

  • pg_copy_physical_replication_slot('slot1','slot2')

Monitoring

  • Échantillon des requêtes dans les logs
  • Vues de progression pour CREATE INDEX, CLUSTER, VACUUM
  • Listing : 
    • des fichiers dans les répertoires status des archives des wals
    • des fichiers temporaires
  • pg_stat_replication : timestamp du dernier message reçu du secondaire

Échantillon des requêtes dans les logs

  • log_transaction_sample_rate

Informations de progression

  • Nouvelles vues pour l’avancement des tâches de maintenance
    • pg_stat_progress_cluster
    • pg_stat_progress_create_index
  • En complément d’une déjà existante depuis la version 11
    • pg_stat_progress_vacuum

Progression des réécritures de table

  • Vue pg_stat_progress_cluster
    • Pour les opérations CLUSTER et VACCUM FULL

Progression des maintenances d’index

  • Vue pg_stat_progress_create_index
    • Pour les opérations CREATE INDEX et REINDEX

Archive status

  • pg_ls_archive_statusdir()

Fichiers temporaires

  • pg_ls_tmpdir()

Ajout dans la vue pg_stat_replication

  • timestamp du dernier message reçu du standby

Administration

  • Nouveautés sur le VACUUM
  • Recyclage des WAL
  • Environnement client : PG_COLORS, EXPLAIN SETTINGS
  • Outils : pg_upgrade, pg_ctl, pg_checksums
  • Paramètres de postgresql.conf

Nouveautés du VACUUM

  • VACUUM TRUNCATE
  • SKIP_LOCKED
  • INDEX_CLEANUP
  • Nouvelles options de vacuumdb

VACUUM TRUNCATE

  • Indique si l’espace en fin de table doit être libéré
  • Évite un verrou exclusif en fin de traitement
  • Nouvel attribut de table : VACUUM_TRUNCATE
  • Nouvelle option de la commande : VACUUM (TRUNCATE on)
  • Non disponible pour vacuumdb

SKIP_LOCK

  • Plus d’attente de verrou
  • Concerne VACUUM et ANALYZE

VACUUM INDEX CLEANUP

  • Nouvel attribut permettant de ne pas nettoyer les index

Nouvelles Options de vacuumdb

  • --min-xid-age
  • --min-mxid-age
  • --disable-page-skipping
  • --skip-locked

Journaux de transactions

Nouvelles options pour les journaux de transactions :

  • wal_recycle
  • wal_init_zero

Environnement Client

  • Variables d’environnement PG_COLOR et PG_COLORS
  • Formatage CSV en sortie de psql
  • EXPLAIN (SETTINGS)

Outils

  • pg_upgrade --clone et pg_upgrade --socketdir
  • Rotation des logs avec pg_ctl logrotate
  • pg_checksums, anciennement pg_verify_checksums

Outil pg_checksums

  • pg_verify_checksums renommée en pg_checksums
  • Activation, désactivation des checksums

Paramètres de configuration

  • Nouveaux paramètres
  • Disparition du fichier recovery.conf
  • Paramètres modifiés
  • Paramètres dont la valeur par défaut a été modifiée

Performances

  • REINDEX CONCURRENTLY
  • CREATE STATISTICS pour les distributions non-uniformes
  • Paramètre plan_cache_mode
  • Fonctions d’appui : pour améliorer les estimations de coût des fonctions
  • JIT par défaut
  • Optimisation CTE : MATERIALIZED / NOT MATERIALIZED
  • Meilleures performances sur le partitionnement

REINDEX CONCURRENTLY

  • REINDEX CONCURRENTLY

CREATE STATISTICS mcv

  • Nouveau type MCV pour la commande CREATE STATISTICS
  • Most Common Values
  • Collecte les valeurs les plus communes pour un ensemble de colonnes

Mise en cache des plans d’exécution

  • plan_cache_mode
  • Trois modes:
    • auto
    • force_custom_plan
    • force_generic_plan

Fonctions d’appui (support functions)

  • Améliore la visibilité du planificateur sur les fonctions
  • Possibilité d’associer à une fonction une fonction « de support »
  • Produit dynamiquement des informations sur:
    • la sélectivité
    • le nombre de lignes produit
    • son coût d’exécution
  • La fonction doit être écrite en C

JIT par défaut

  • JIT (Just-In-time) est maintenant activé par défaut

Modification du comportement par défaut des requêtes CTE

  • Les CTE ne sont plus par défaut des barrières d’optimisation
  • Modification du comportement par défaut des CTE
  • Nouvelles syntaxes:
    • MATERIALIZED
    • NOT MATERIALIZED

Performances du partitionnement

  • Performances accrues pour les tables avec un grand nombre de partitions
  • Verrous lors des manipulations de partitions
  • Support des clés étrangères vers une table partitionnée
  • Amélioration du chargement de données

Incompatibilités

  • Disparition du recovery.conf
  • max_wal_senders plus inclus dans max_connections
  • Noms des clés étrangères
  • Tables WITH OIDS n’existent plus
  • Types de données supprimés
  • Fonctions to_timestamp et to_date
  • Outil pg_checksums

Disparition du fichier recovery.conf.

  • Fichier recovery.conf fusionné avec les paramètres normaux

max_wal_senders n’est plus inclus dans max_connections

  • Les wal senders ne sont plus comptabilisés dans max_connections
  • Impact potentiel sur les seuils de supervision
  • Impact plus anecdotique pour ces paramètres

Noms des clés étrangères autogénérées

  • Changement de norme de nommage des FK
  • Inclut désormais toutes les colonnes concernées
  • Impact potentiel sur les outils

WITH OIDS

  • Attribut WITH OIDS supprimé en version 12
  • Colonnes oid « système » deviennent visibles

Type de données supprimés

Suppression des types suivants:

  • abstime
  • reltime
  • tinterval

Fonctions to_timestamp et to_date

  • Correction des fonctions to_timestamp et to_date
  • Changement de comportement

pg_verify_checksums renommée en pg_checksums

L’outil pg_verify_checksums devient pg_checksums

Fonctionnalités futures

  • Pluggable storage
    • HEAP storage, historique et par défaut
    • columnar storage
    • Zed Heap
    • blackhole

Pluggable storage

HEAP storage

  • HEAP storage
  • Méthode de stockage par défaut
  • Seule méthode supportée pour le moment

Méthode d’accès ZedStore (Columnar storage)

  • Méthode orientée colonne
  • Données compressées
  • Nom temporaire !

Méthode d’accès zHeap

  • Meilleur contrôle du bloat
  • Réduction de l’amplification des écritures
  • Réduction de la taille des entêtes
  • Méthode basée sur les différences

Méthode d’accès Blackhole

  • Sert de base pour créer une extension Access Method
  • Toute donnée ajoutée est envoyée dans le néant

Ateliers

TP sur les colonnes générées

  • Création d’une colonne générée
  • Observations lors d’un UPDATE
  • Utilisation des index

TP sur le partitionnement

  • Transformation d’une table référencée en table partitionnée
  • Fonctions d’information sur le partitionnement
  • Nouvelle commande \dP pour les partitions

TP Monitoring

  • Échantillon des requêtes dans les logs
  • Vues de progression des opérations de maintenance
  • pg_ls_archive_statusdir() et pg_ls_tmpdir()
  • pg_stat_replication : timestamp du dernier message reçu du standby

TP Index et performances

  • Les fonctions d’appui
  • REINDEX CONCURRENTLY

License