Dans le paysage technologique actuel en constante évolution, où la performance est une priorité absolue, les bases de données jouent un rôle essentiel pour garantir des expériences utilisateur fluides et des applications fiables.
Chez WeWard, où chaque milliseconde compte pour améliorer l'expérience des utilisateurs, nous nous sommes embarqués dans un voyage ambitieux pour transformer PostgreSQL en un moteur de performance exceptionnel. Cet article explore les défis rencontrés, les solutions mises en œuvre et les meilleures pratiques qui nous ont permis d'optimiser PostgreSQL de manière significative.
Dans un monde où les utilisateurs attendent des temps de réponse instantanés, des bases de données lentes peuvent entraîner des frustrations et des opportunités manquées. Chez WeWard, ce défi se traduit par des millions de transactions quotidiennes et des requêtes complexes nécessitant une performance sans faille. Nos défis comprenaient des requêtes lentes, une charge excessive et une architecture nécessitant une évolutivité accrue.
Voici comment nous avons surmonté ces obstacles.
La base de toute optimisation de PostgreSQL commence par l'analyse des requêtes. Nous avons identifié les inefficacités en étudiant les plans d'exécution des requêtes.
Utilisation EXPLIQUER
et ANALYSER
Nous avons obtenu une vue radiographique de nos requêtes.
Exemple de requête problématique :
SELECT level_customer.*
FROM level_customer
JOIN level ON level.id = level_customer.level_id
WHERE level_customer.customer_id = XXXXXXX
AND level_customer.start_date <= '2024-05-07'::date
AND level.version = 2
ORDER BY level_customer.start_date DESC, level.value DESC
LIMIT 1;
Problèmes détectés :
Solution : Création d'un index :
CREATE INDEX idx_level_customer_customer_date_value
ON level_customer (customer_id, start_date DESC, level_id DESC) ;
Ajustement du planificateur :Nous avons forcé PostgreSQL à utiliser Boucle imbriquée
au lieu de l'option par défaut Jointure de hachage
pour cette requête spécifique.
Vues matérialisées :pour les requêtes complexes, les vues matérialisées réduisent la charge de calcul à chaque exécution, ce qui permet d'obtenir des performances remarquablement stables.
Avec des millions de requêtes quotidiennes, nous avons adopté une architecture basée sur les répliques pour répartir la charge.
Avantages :
Considérations techniques :
Les tables contenant des milliards de lignes peuvent ralentir considérablement les opérations de lecture et d'écriture. Le partitionnement divise une table en sous-ensembles plus petits, ce qui améliore l'efficacité des requêtes.
Outil : pg_partman
Avantages :
Chaque connexion PostgreSQL consomme des ressources système. Pour éviter une surcharge du serveur :
max_connections
a été ajustée en fonction du matériel disponible et des besoins de l'application.Paramètres clés de la mémoire de PostgreSQL :
tampons_partagés
: Contrôle l'allocation de mémoire pour la mise en cache des données fréquemment consultées.travail_mémoire
: Définit la mémoire pour les tables de tri et de hachage pendant l'exécution de la requête.Les données critiques ("chaudes") restent dans PostgreSQL, tandis que les données moins fréquemment consultées ("froides") sont transférées vers Amazon S3 ou Google Cloud Storage. L'analyse des données froides est réalisée à l'aide de Google BigQuery.
Avantages :
WeWard utilise des outils de surveillance avancés tels que :
Avantages :
En combinant une optimisation rigoureuse des requêtes, une gestion intelligente des ressources et des architectures modernes, PostgreSQL est devenu un allié clé pour WeWard. Ces solutions sont applicables à toute organisation souhaitant maximiser le potentiel de ses bases de données.
💬 Quelles sont vos stratégies pour optimiser PostgreSQL ? Partagez vos expériences et participez à la conversation !
👉 Découvrez notre application mobile : WeWard.