Partitionnement de hachage PostgreSQL 20 fois plus rapide : contournement des recherches de catalogue

2025-08-27
Partitionnement de hachage PostgreSQL 20 fois plus rapide : contournement des recherches de catalogue

Le partitionnement de hachage de PostgreSQL entraîne une surcharge de recherche de catalogue dans les applications à débit élevé. Cet article présente une technique d’optimisation qui contourne les recherches de catalogue de PostgreSQL en précalculant les index de partition dans la couche applicative. L’utilisation de la gemme Ruby `pg_hash_func` ou l’appel direct des fonctions de hachage de PostgreSQL peut accélérer les requêtes de plus de 20 fois, réduisant ainsi considérablement la latence. Cette approche convient aux scénarios critiques en termes de performances et offre davantage d’options pour équilibrer simplicité et performances.

Lire plus

Assistants de codage IA : bénédiction ou malédiction ?

2025-06-17
Assistants de codage IA : bénédiction ou malédiction ?

Les assistants de codage IA deviennent de plus en plus sophistiqués, générant du code propre et efficace. Cependant, cela peut conduire à une « conclusion prématurée », où les développeurs sont séduits par des solutions apparemment parfaites et ignorent des problèmes plus profonds. L’article utilise une analogie médicale, comparant l’IA à des médecins expérimentés qui pourraient manquer une condition rare en raison de leur expérience. L’auteur conseille aux développeurs d’évaluer de manière critique les suggestions de l’IA, d’explorer activement plusieurs solutions et d’éviter de tomber dans le piège des solutions rapides afin d’améliorer la qualité du code et d’éviter l’accumulation de dette technique.

Lire plus
Développement

Comportement inattendu de PostgreSQL : CTE, DELETE et LIMIT

2025-05-04
Comportement inattendu de PostgreSQL : CTE, DELETE et LIMIT

Un comportement inattendu de PostgreSQL est apparu lors de l'utilisation d'une expression de table commune (CTE) avec DELETE ... RETURNING et LIMIT pour traiter un lot d'éléments. L'intention était de supprimer une seule ligne, mais plusieurs lignes ont été supprimées. `EXPLAIN ANALYZE` a révélé une optimisation de jointure semi-join imbriquée, entraînant l'exécution multiple de la clause LIMIT 1. La solution a consisté à restructurer la requête, en évitant la CTE et en utilisant une sous-requête directement dans la clause WHERE de DELETE. Cela souligne que les CTE n'empêchent pas toujours les optimisations du plan de requête, et un examen minutieux du plan est crucial pour les opérations critiques.

Lire plus
Développement Optimisation de requête

Commit synchrone de PostgreSQL : compromis entre performances et durabilité

2025-03-19
Commit synchrone de PostgreSQL : compromis entre performances et durabilité

Cet article explore les implications sur les performances du paramètre `synchronous_commit` de PostgreSQL. Le désactiver améliore significativement le débit des transactions, réduisant les E/S et la charge CPU, mais introduit une petite fenêtre de risque de perte de données. L'auteur démontre une augmentation de 30 % du TPS sur les systèmes limités par les E/S. L'article préconise une approche nuancée, suggérant d'ajuster `synchronous_commit` par session, transaction ou opération, avec un exemple en Ruby on Rails fourni. L'auteur note également que sur Aurora PostgreSQL, définir `synchronous_commit` sur `off` procure les gains de performances les plus importants.

Lire plus
Développement commit synchrone

Mise à l'échelle de PostgreSQL : problèmes étranges et solutions pour les startups à forte croissance

2025-02-09
Mise à l'échelle de PostgreSQL : problèmes étranges et solutions pour les startups à forte croissance

Cet article traite des problèmes courants de mise à l'échelle de PostgreSQL rencontrés par les startups à forte croissance. Il aborde des problèmes tels que la contention de verrouillage, le gonflement des index, les inefficacités de stockage TOAST et les complexités de la mise à l'échelle verticale par rapport à la mise à l'échelle horizontale, les tables en mode ajout uniquement par rapport aux tables à nombreuses mises à jour et la multilocation. Pour chaque problème, des solutions pratiques sont proposées, allant des ajustements des paramètres de la base de données et des outils de concurrence à la refonte des modèles d'accès aux données et à l'utilisation de fonctionnalités telles que les verrous consultatifs. L'auteur explore également des sujets avancés tels que les migrations de schémas sous charge, les mises à niveau sans temps d'arrêt et les stratégies efficaces de requêtes COUNT. Il s'agit d'une ressource précieuse pour les ingénieurs qui s'efforcent d'optimiser les performances de PostgreSQL dans des environnements exigeants.

Lire plus

Mocks de bases de données : plus de problèmes qu’ils n’en valent la peine ?

2024-12-30
Mocks de bases de données : plus de problèmes qu’ils n’en valent la peine ?

S’il est tentant de les utiliser pour leur rapidité et leur simplicité, l’auteur soutient que l’utilisation de mocks de bases de données pour les tests finit par engendrer plus de problèmes qu’elle n’en résout. Un exemple de création d’utilisateur met en évidence les différences entre les mocks et les tests effectués sur une base de données réelle. Les tests sur une base de données réelle révèlent des problèmes potentiels dès le départ, tels que les violations de contraintes uniques, la gestion des valeurs par défaut et les goulots d’étranglement de performance, ce qui permet de gagner du temps de débogage et de réduire les risques de production. À mesure que les applications évoluent et que les schémas changent, les tests sur une base de données réelle gèrent mieux les nouvelles validations, les modifications de type de données et les changements de précision des horodatages, en garantissant que le code est aligné sur la base de données réelle. L’auteur suggère de privilégier les tests sur une base de données réelle pour les couches d’accès aux données, tout en les utilisant au niveau de la couche de service pour mettre en évidence les interactions de la logique métier avec les données. Les couches de contrôleurs, en revanche, peuvent simuler efficacement les appels de service. L’équilibre entre les tests sur une base de données réelle et les mocks est essentiel pour construire des applications robustes.

Lire plus