PostgreSQL 11 : Évolution du partitionnement de Postgres 9.6 à Postgres 11

Excellente fin de semaine à tous ! Il reste de moins en moins de temps avant le lancement du cours. «Bases de données relationnelles», c'est pourquoi aujourd'hui nous partageons la traduction d'un autre matériel utile sur le sujet.

En cours de dĂ©veloppement PostgreSQL 11 un travail impressionnant a Ă©tĂ© rĂ©alisĂ© pour amĂ©liorer le partitionnement des tables. Partitionnement des tables — c'est une fonctionnalitĂ© qui existe dans PostgreSQL depuis suffisamment longtemps, mais qui, pour ainsi dire, n'Ă©tait pas vraiment prĂ©sente avant la version 10, oĂč elle est devenue une fonctionnalitĂ© trĂšs utile. Auparavant, nous avions dĂ©clarĂ© que l'hĂ©ritage des tables Ă©tait notre mise en Ɠuvre du partitionnement, et c'est vrai. Cependant, cette mĂ©thode vous obligeait Ă  faire une grande partie du travail manuellement. Par exemple, si vous vouliez que les tuples soient insĂ©rĂ©s dans les sections pendant les INSERT, vous deviez configurer des dĂ©clencheurs pour le faire pour vous. Le partitionnement par hĂ©ritage Ă©tait trĂšs lent et difficile Ă  dĂ©velopper pour ajouter des fonctionnalitĂ©s supplĂ©mentaires.

Dans PostgreSQL 10, nous avons vu naĂźtre le "partitionnement dĂ©claratif" — une fonctionnalitĂ© destinĂ©e Ă  rĂ©soudre de nombreux problĂšmes qui Ă©taient insolubles avec l'ancienne mĂ©thode d'hĂ©ritage. Cela a conduit Ă  l'Ă©mergence d'un outil beaucoup plus puissant permettant de diviser les donnĂ©es horizontalement !

Comparaison des fonctionnalités

Dans PostgreSQL 11, un ensemble impressionnant de nouvelles fonctionnalités est apparu, qui aide à améliorer les performances et à rendre les tables partitionnées plus transparentes pour les applications.

PostgreSQL 11 : Évolution du partitionnement de Postgres 9.6 à Postgres 11
PostgreSQL 11 : Évolution du partitionnement de Postgres 9.6 à Postgres 11
PostgreSQL 11 : Évolution du partitionnement de Postgres 9.6 à Postgres 11
1. Utilisation d'exceptions de contrainte
2. Ajoute uniquement des nƓuds
3. Seulement pour des tables partitionnées, faisant référence à une non-partitionnée
4. Les index doivent contenir toutes les colonnes clés de la section
5. Les contraintes sur les sections des deux cÎtés doivent correspondre

Performance

Ici, nous avons Ă©galement de bonnes nouvelles ! Une nouvelle mĂ©thode a Ă©tĂ© ajoutĂ©e pour la suppression des sections. Cet nouvel algorithme peut dĂ©terminer les sections appropriĂ©es en parcourant la condition de la requĂȘte OÙ. L'algorithme prĂ©cĂ©dent, quant Ă  lui, vĂ©rifiait chaque section pour dĂ©terminer si elle pouvait rĂ©pondre Ă  la condition OÙ. Cela entraĂźnait une augmentation supplĂ©mentaire du temps de planification Ă  mesure que le nombre de sections augmentait.

Dans la version 9.6, avec le partitionnement basĂ© sur l'hĂ©ritage, le routage des tuples dans les sections s'effectuait gĂ©nĂ©ralement en Ă©crivant une fonction dĂ©clencheur contenant une sĂ©rie d'opĂ©rateurs IF pour insĂ©rer le tuple dans la bonne section. Ces fonctions pouvaient ĂȘtre trĂšs lentes Ă  exĂ©cuter. Avec le partitionnement dĂ©claratif ajoutĂ© dans la version 10, cela fonctionne dĂ©sormais beaucoup plus rapidement.

En utilisant une table partitionnée avec 100 sections, nous pouvons évaluer les performances du chargement de 10 millions de lignes dans une table avec 1 colonne BIGINT et 5 colonnes INT.

PostgreSQL 11 : Évolution du partitionnement de Postgres 9.6 à Postgres 11

Les performances de la requĂȘte sur cette table pour rechercher un enregistrement indexĂ© et effectuer des DML pour manipuler un enregistrement (en utilisant uniquement 1 processeur) :

PostgreSQL 11 : Évolution du partitionnement de Postgres 9.6 à Postgres 11

Ici, nous voyons que les performances de chaque opĂ©ration ont considĂ©rablement augmentĂ© aprĂšs PG 9.6. Les requĂȘtes SELECT sont beaucoup meilleures, en particulier celles capables d'exclure de nombreuses sections lors de la planification des requĂȘtes. Cela signifie que le planificateur peut Ă©viter une grande partie du travail qu'il devait effectuer auparavant. Par exemple, il n'est plus nĂ©cessaire de construire des chemins pour les sections inutiles.

Conclusion

Le partitionnement de tables devient une fonctionnalitĂ© trĂšs puissante dans PostgreSQL. Il permet de fournir rapidement des donnĂ©es en ligne et de les transfĂ©rer hors ligne, sans attendre la fin d'opĂ©rations DML massives et lentes.Cela signifie Ă©galement que les donnĂ©es connexes peuvent ĂȘtre stockĂ©es ensemble, ce qui permet d'accĂ©der aux donnĂ©es nĂ©cessaires de maniĂšre beaucoup plus efficace. Les amĂ©liorations apportĂ©es dans cette version n'auraient pas Ă©tĂ© possibles sans les dĂ©veloppeurs, Ă©valuateurs et commetteurs qui ont travaillĂ© sans relĂąche sur toutes ces fonctionnalitĂ©s.
Merci Ă  eux tous ! PostgreSQL 11 a l'air tout simplement fantastique !

Voici un article court, mais plutÎt intéressant. N'hésitez pas à partager vos commentaires, et n'oubliez pas de vous inscrire à journée portes ouvertes, dans le cadre duquel le programme du cours sera détaillé.

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster