, la derniĂšre version de « la meilleure base de donnĂ©es relationnelle open source au monde », sera disponible dans quelques semaines (si tout se passe comme prĂ©vu). Cela correspond Ă un calendrier habituel â une nouvelle version avec de nombreuses nouvelles fonctionnalitĂ©s est publiĂ©e chaque annĂ©e, et, honnĂȘtement, c'est impressionnant. C'est pourquoi je suis devenu un membre actif de la communautĂ© PostgreSQL.
Ă mon avis, contrairement aux versions prĂ©cĂ©dentes, PostgreSQL 12 ne contient pas une ou deux fonctionnalitĂ©s rĂ©volutionnaires (comme le partitionnement ou le parallĂ©lisme des requĂȘtes). J'ai plaisantĂ© en disant que la principale caractĂ©ristique de PostgreSQL 12 est une plus grande stabilitĂ©. N'est-ce pas ce dont vous avez besoin lorsque vous gĂ©rez des donnĂ©es critiques pour votre entreprise ?
Mais PostgreSQL 12 ne s'arrĂȘte pas lĂ : avec les nouvelles fonctionnalitĂ©s et amĂ©liorations, les applications fonctionneront mieux, et il vous suffit de rĂ©aliser une mise Ă niveau !
(Eh bien, peut-ĂȘtre aussi de reconstruire les index, mais dans cette version, ce n'est pas si grave que nous avons l'habitude de le penser.)
Ce serait super â mettre Ă niveau PostgreSQL et profiter immĂ©diatement d'amĂ©liorations significatives sans effort supplĂ©mentaire. Il y a quelques annĂ©es, j'ai analysĂ© la mise Ă jour de PostgreSQL 9.4 Ă PostgreSQL 10 et j'ai vu comment l'application s'Ă©tait accĂ©lĂ©rĂ©e grĂące au meilleur parallĂ©lisme des requĂȘtes dans PostgreSQL 10. Et surtout, il ne m'a presque rien Ă©tĂ© demandĂ© (il suffisait de dĂ©finir un paramĂštre de configuration max_parallel_workers).
Vous conviendrez qu'il est pratique que les applications fonctionnent mieux immédiatement aprÚs une mise à niveau. Et nous faisons de notre mieux pour ravir les utilisateurs, car PostgreSQL en a de plus en plus.
Et comment une simple mise Ă niveau vers PostgreSQL 12 vous rendra-t-elle heureux ? Je vais vous le raconter maintenant.
Améliorations significatives de l'indexation
Sans indexation, une base de données n'ira pas loin. Comment trouver rapidement des informations autrement ? Le systÚme fondamental d'indexation de PostgreSQL s'appelle . Ce type d'index est optimisé pour les systÚmes de stockage.
Nous utilisons simplement l'instruction CREATE INDEX ON some_table (some_column), et PostgreSQL fait le gros du travail pour maintenir la pertinence de l'index pendant que nous insérons, mettons à jour et supprimons constamment des valeurs. Tout fonctionne tout seul, comme par magie.
Mais les index de PostgreSQL ont un problĂšme â ils et occupent un espace disque inutile, rĂ©duisant ainsi la performance de l'extraction et de la mise Ă jour des donnĂ©es. Par « gonflement », j'entends le maintien inefficace de la structure d'index. Cela peut ĂȘtre, ou non, liĂ© aux tuples orphelins que supprime (merci pour l'information Ă Peter Geoghegan ()). Le gonflement de l'index est particuliĂšrement visible dans les charges de travail oĂč l'index est activement modifiĂ©.
PostgreSQL 12 améliore considérablement le fonctionnement des index en arbre B, et des expériences avec des tests de type TPC-C ont montré que l'espace utilisé n'est maintenant, en moyenne, que 40 % de moins. Nous dépensons désormais moins de temps non seulement pour l'entretien des index en arbre B (c'est-à -dire pour les opérations d'écriture), mais aussi pour l'extraction des données, car les index sont devenus beaucoup plus petits.
Les applications qui mettent Ă jour activement leurs tables â gĂ©nĂ©ralement des applications OLTP () â utiliseront beaucoup plus efficacement le disque et traiteront les requĂȘtes. Plus il y a d'espace sur le disque, plus la base de donnĂ©es dispose d'espace pour croĂźtre sans mettre Ă niveau l'infrastructure.
Certaines stratĂ©gies de mise Ă niveau nĂ©cessitent la reconstruction des index en arbre B pour profiter de ces avantages (par exemple, ne reconstruit pas automatiquement les index). Dans les versions prĂ©cĂ©dentes de PostgreSQL, la reconstruction de gros index dans des tables entraĂźnait des temps d'arrĂȘt significatifs, car pendant ce temps, aucune modification ne pouvait ĂȘtre apportĂ©e. Mais dans PostgreSQL 12, il y a une autre fonctionnalitĂ© intĂ©ressante : il est dĂ©sormais possible de reconstruire les index en parallĂšle avec la commande , afin d'Ă©viter complĂštement le temps d'arrĂȘt.
Dans PostgreSQL 12, il y a Ă©galement d'autres amĂ©liorations de l'infrastructure d'indexation. Une autre chose oĂč la magie a fait son effet est le , aussi connu sous le nom de WAL (write-ahead log). Le journal de préécriture enregistre chaque transaction dans PostgreSQL en cas de panne et pour la rĂ©plication. Les applications l'utilisent pour l'archivage et . Bien sĂ»r, le journal de préécriture est Ă©crit sur disque, ce qui peut affecter les performances.
Dans PostgreSQL 12, les coûts des enregistrements WAL générés par les index GiST, GIN et SP-GiST lors de la construction de l'index ont été réduits. Cela offre plusieurs avantages tangibles : les enregistrements WAL occupent moins d'espace disque et les données se reproduisent plus rapidement, par exemple lors d'une restauration aprÚs un plantage ou lors d'une récupération à un moment donné. Si vous utilisez ces index dans vos applications (par exemple, les applications géospatiales basées sur PostGIS utilisent beaucoup l'index GiST), c'est une autre fonctionnalité qui améliorera considérablement les performances sans effort de votre part.
Le partitionnement - plus, mieux, plus rapide
Dans PostgreSQL 10, . Dans PostgreSQL 11, son utilisation est devenue beaucoup plus simple. Dans PostgreSQL 12, le dimensionnement des sections peut ĂȘtre modifiĂ©.
Dans PostgreSQL 12, la performance du systĂšme de partitionnement s'est considĂ©rablement amĂ©liorĂ©e, surtout si la table contient des milliers de sections. Par exemple, si une requĂȘte ne touche que quelques sections d'une table contenant des milliers d'entre elles, elle s'exĂ©cutera beaucoup plus rapidement. La performance a Ă©tĂ© amĂ©liorĂ©e non seulement pour ce type de requĂȘtes. Vous remarquerez Ă©galement comment les opĂ©rations INSERT dans les tables avec de nombreuses sections ont Ă©tĂ© accĂ©lĂ©rĂ©es.
L'enregistrement des données via - d'ailleurs, c'est un excellent moyen et voici un exemple - dans les tables partitionnées de PostgreSQL 12 est également devenu plus efficace. Avec COPY, c'était déjà rapide, mais dans PostgreSQL 12, c'est vraiment rapide.
Grùce à ces avantages, PostgreSQL peut stocker des ensembles de données encore plus grands, et leur extraction est devenue plus simple. Et sans aucun effort de votre part. Si votre application possÚde de nombreuses sections, par exemple, si elle écrit des données de séries temporelles, une simple mise à niveau améliorera considérablement ses performances.
Et mĂȘme si cette amĂ©lioration n'est pas tout Ă fait dans la catĂ©gorie « nous avons mis Ă niveau et nous nous rĂ©jouissons », dans PostgreSQL 12, il est possible de crĂ©er des clĂ©s Ă©trangĂšres qui font rĂ©fĂ©rence Ă des tables partitionnĂ©es, rendant le travail avec le partitionnement un vĂ©ritable plaisir.
Les requĂȘtes WITH se sont beaucoup amĂ©liorĂ©es
Lorsque (Ă©galement appelĂ©es CTE, Ă©galement des requĂȘtes WITH), j'Ă©tais impatient d'Ă©crire un article sur . C'est l'une de ces fonctionnalitĂ©s qui accĂ©lĂ©rera l'application. Si, bien sĂ»r, vous utilisez des CTE.
Je remarque souvent que les dĂ©butants en SQL aiment utiliser les CTE : si on les Ă©crit d'une certaine maniĂšre, on a vraiment l'impression d'Ă©crire un programme impĂ©ratif. Personnellement, j'aimais réécrire ces requĂȘtes pour m'en passer. sans CTE et amĂ©liorer les performances. Tout est diffĂ©rent maintenant.
PostgreSQL 12 permet d'intĂ©grer un certain type de CTE sans effets secondaires (SELECT), qui n'est utilisĂ© qu'une seule fois prĂšs de la fin de la requĂȘte. Si je tenais des statistiques sur les requĂȘtes avec CTE que je réécrivais, la plupart d'entre elles tomberaient dans cette catĂ©gorie. Cela aide les dĂ©veloppeurs Ă Ă©crire un code comprĂ©hensible, qui fonctionne dĂ©sormais aussi rapidement.
De plus, PostgreSQL 12 optimise l'exĂ©cution des SQL par lui-mĂȘme, vous n'avez rien Ă faire. Et bien que je n'aurai probablement plus besoin d'optimiser ces requĂȘtes, c'est super que PostgreSQL continue Ă travailler sur l'optimisation des requĂȘtes.
Just-in-Time (JIT) â est maintenant activĂ© par dĂ©faut.
Dans les systĂšmes PostgreSQL 12 prenant en charge La compilation JIT est activĂ©e par dĂ©faut. Tout d'abord, vous bĂ©nĂ©ficiez du support pour certaines opĂ©rations internes, et deuxiĂšmement, les requĂȘtes avec des expressions (le plus simple exemple est x + y) dans les listes de sĂ©lection (qui se trouvent aprĂšs SELECT), les agrĂ©gats, les expressions avec des clauses WHERE et d'autres peuvent utiliser JIT pour amĂ©liorer les performances.
Puisque JIT est activĂ© par dĂ©faut dans PostgreSQL 12, la performance s'amĂ©liorera par elle-mĂȘme, mais je conseille de tester l'application dans PostgreSQL 11, oĂč JIT a fait ses dĂ©buts, afin de mesurer la performance des requĂȘtes et de dĂ©terminer s'il est nĂ©cessaire d'ajuster quelque chose.
Et qu'en est-il des autres nouvelles fonctionnalités de PostgreSQL 12 ?
PostgreSQL 12 offre une multitude de nouvelles fonctionnalitĂ©s intĂ©ressantes â de la possibilitĂ© d'explorer des donnĂ©es JSON Ă l'aide d'expressions SQL/JSON standard Ă l'authentification multifactorielle avec l'option clientcert=verify-full, des colonnes gĂ©nĂ©rĂ©es et bien d'autres encore. Il y a de quoi Ă©crire un article sĂ©parĂ©.
Tout comme PostgreSQL 10, PostgreSQL 12 amĂ©liorera les performances globales immĂ©diatement aprĂšs la mise Ă niveau. Vous aurez, bien sĂ»r, votre propre façon de faire â testez l'application dans des conditions similaires dans un systĂšme de production avant d'activer les amĂ©liorations, comme je l'ai fait avec PostgreSQL 10. MĂȘme si PostgreSQL 12 est dĂ©jĂ plus stable que je ne l'aurais pensĂ©, ne nĂ©gligez pas de tester soigneusement les applications avant de les mettre en production.
Source : habr.com
