13 points par GN⁺ 2024-09-27 | 1 commentaires | Partager sur WhatsApp
  • PostgreSQL 17 inclut d’importantes améliorations de performances, une meilleure gestion de la mémoire, des optimisations de l’accès au stockage, des améliorations pour les charges de travail à forte concurrence, des vitesses accrues pour le chargement massif et l’export, ainsi qu’une meilleure exécution des requêtes sur index

Améliorations des performances à l’échelle du système

  • Amélioration de la structure mémoire interne du processus vacuum de PostgreSQL, essentiel au fonctionnement normal, réduisant l’utilisation mémoire jusqu’à 20 fois
    • Accélération de vacuum et réduction de l’usage des ressources partagées, libérant davantage de ressources pour les charges de travail
  • Amélioration continue des performances de la couche d’E/S
    • L’amélioration du traitement du Write-Ahead Log (WAL) permet jusqu’à 2 fois plus de débit en écriture sur des charges de travail à forte concurrence
    • Une nouvelle interface de streaming I/O accélère les scans séquentiels (lecture de toutes les données d’une table) et la mise à jour des statistiques de plan d’exécution de la commande ANALYZE
  • Extension des gains de performance à l’exécution des requêtes
    • Amélioration des performances des requêtes contenant des clauses IN utilisant des index B-tree (la méthode d’indexation par défaut de PostgreSQL)
    • Prise en charge de la construction parallèle des index BRIN
  • Plusieurs améliorations de la planification des requêtes
    • Optimisation des contraintes NOT NULL
    • Amélioration du traitement des expressions de table communes (requêtes WITH)
  • Extension de la prise en charge SIMD (Single Instruction/Multiple Data) pour accélérer les calculs, notamment avec l’utilisation d’AVX-512 pour la fonction bit_count

Une expérience développeur encore renforcée

  • PostgreSQL a été la première base de données relationnelle à ajouter la prise en charge de JSON (2012)
  • PostgreSQL 17 étend encore l’implémentation de la norme SQL/JSON
    • JSON_TABLE permet de convertir des données JSON en tables PostgreSQL standard
    • Prise en charge des constructeurs SQL/JSON (JSON, JSON_SCALAR, JSON_SERIALIZE) et des fonctions de requête (JSON_EXISTS, JSON_QUERY, JSON_VALUE)
    • Ajout d’expressions jsonpath axées sur la conversion des données JSON vers les types de données natifs de PostgreSQL (nombres, booléens, chaînes, date/heure)
  • Ajout de la clause RETURNING et de la mise à jour des vues à la commande MERGE
  • Amélioration du chargement massif et de l’export de données
    • Jusqu’à 2 fois plus de performances lors de l’export de grandes lignes avec la commande COPY
    • Amélioration des performances de COPY lorsque l’encodage source et destination est identique
    • Ajout de l’option ON_ERROR, qui permet de poursuivre l’import même en cas d’erreurs d’insertion
  • Extension des capacités de gestion des données réparties entre partitions et instances PostgreSQL distantes
    • Prise en charge des colonnes d’ID et des contraintes d’exclusion sur les tables partitionnées
    • Avec postgres_fdw, les sous-requêtes EXISTS et IN peuvent être poussées vers des serveurs distants
  • Inclusion d’un fournisseur de collation intégré, indépendant de la plateforme et immuable
    • Il fournit une sémantique de tri similaire à la collation C, mais utilise l’encodage UTF-8 au lieu de SQL_ASCII
    • Avec ce nouveau fournisseur de collation, les requêtes basées sur du texte renvoient les mêmes résultats de tri quel que soit l’endroit où PostgreSQL est exécuté

Améliorations de la réplication logique pour la haute disponibilité et les mises à niveau majeures

  • La réplication logique est utilisée pour diffuser les données en temps réel
  • Dans les versions précédentes, il fallait supprimer les slots de réplication logique lors d’une mise à niveau majeure, ce qui imposait une resynchronisation des données vers les abonnés après l’upgrade
  • À partir de PostgreSQL 17, il n’est plus nécessaire de supprimer les slots de réplication logique, ce qui simplifie le processus de mise à niveau
  • Intègre des mécanismes de contrôle du basculement pour la réplication logique, permettant des déploiements plus résilients dans les environnements haute disponibilité
  • Introduction de l’outil en ligne de commande pg_createsubscriber, qui permet de convertir une réplique physique en nouvelle réplique logique

Davantage d’options pour la sécurité et l’administration opérationnelle

  • PostgreSQL 17 étend encore les possibilités offertes aux utilisateurs pour gérer l’ensemble du cycle de vie du système de base de données
  • Ajout d’une nouvelle option TLS, sslnegotiation, qui permet d’effectuer directement le handshake TLS lors de l’utilisation d’ALPN
  • Ajout du rôle prédéfini pg_maintain, qui accorde des autorisations pour effectuer des opérations de maintenance
  • pg_basebackup, l’utilitaire de sauvegarde inclus dans PostgreSQL, prend désormais en charge les sauvegardes incrémentales, et l’utilitaire pg_combinebackup a été ajouté pour reconstituer une sauvegarde complète
  • pg_dump inclut une nouvelle option --filter, qui permet de sélectionner les objets à inclure lors de la création d’un fichier de dump
  • Amélioration des capacités de monitoring et d’analyse
    • EXPLAIN affiche désormais le temps consacré à la lecture et à l’écriture des blocs d’E/S locaux
    • Deux nouvelles options, SERIALIZE et MEMORY, sont incluses : elles sont utiles pour vérifier le temps consacré à la transformation des données pour la transmission réseau et la quantité de mémoire utilisée
  • Affichage de la progression du nettoyage des index
  • Ajout de la vue système pg_wait_events, qui, combinée à pg_stat_activity, fournit des informations sur les raisons pour lesquelles une session active est en attente

1 commentaires

 
GN⁺ 2024-09-27
Avis Hacker News
  • Félicitations pour la nouvelle sortie de PostgreSQL 17, avec la mention de plusieurs améliorations

    • amélioration de la structure mémoire des opérations de vacuum, réduisant l’utilisation mémoire jusqu’à 20 fois
    • prise en charge des sauvegardes incrémentales par l’utilitaire de sauvegarde pg_basebackup et ajout de l’utilitaire pg_combinebackup
    • amélioration des wrappers de données externes (FDW), permettant de traiter les sous-requêtes EXISTS et IN sur des serveurs distants
  • Avis sur l’utilité des fonctionnalités JSON

    • mise en avant de l’utilité des fonctionnalités JSON dans une base de données relationnelle
    • mention de l’importance de pouvoir générer du JSON à partir des données
    • expression de l’envie d’apprendre à utiliser la fonctionnalité JSON_TABLE
  • Partage d’une expérience d’usage de la fonctionnalité JSON_TABLE

    • mise en avant de l’utilité de stocker les réponses JSON dans une colonne jsonb puis de les analyser via une vue
    • satisfaction d’avoir retrouvé cette approche dans la documentation des nouvelles fonctionnalités de PostgreSQL
  • Mention des améliorations de performances et d’UX de PostgreSQL 17

    • prise en charge des colonnes ID et des contraintes d’exclusion dans les tables partitionnées
    • ajout d’un fournisseur de tri indépendant de la plateforme et immuable, garantissant des résultats de tri cohérents pour les requêtes textuelles
  • Impression sur le changelog

    • déception de ne pas voir la PR UUIDv7 incluse
  • Partage d’une expérience de migration d’Oracle vers MSSQL à cause de problèmes de confiance envers les logiciels open source

    • affirmation d’un supérieur selon laquelle « on ne peut pas faire confiance à l’open source pour les logiciels d’entreprise »
  • Remerciements pour l’amélioration continue de Postgres et espoir d’une prise en charge officielle de l’extension Incremental View Maintenance (IVM)

  • Attentes concernant la prise en charge des mises à niveau majeures de PostgreSQL

  • Souhait de voir des tables à version système introduites dans Postgres

  • Attente que l’amélioration de l’intégration JSON de Postgres permette un nouveau paradigme de framework web