Question

Je configure une application Web avec un back-end FreeBSD PostgreSQL.Je recherche un outil/une technique d'optimisation des performances de la base de données.

Était-ce utile?

La solution

pgfouine fonctionne assez bien pour moi.Et on dirait qu'il y a un Portage FreeBSD pour ça.

Autres conseils

L'optimisation de la base de données est généralement une combinaison de deux choses

  1. Réduisez le nombre de requêtes sur la base de données
  2. Réduisez la quantité de données à examiner pour répondre aux requêtes

La réduction du nombre de requêtes se fait généralement en mettant en cache les données non volatiles/moins importantes (par ex."Quels utilisateurs sont en ligne" ou "Quelles sont les dernières publications de cet utilisateur ?") dans l'application (si possible) ou dans une banque de données externe - plus efficace - (memcached, redis, etc.).Si vous disposez d'informations très lourdes en écriture (par ex.compteurs d'accès) et n'a pas besoin ACIDE-sémantique, vous pouvez également penser à le déplacer de la base de données Postgres vers des magasins de données plus efficaces.

L'optimisation du temps d'exécution des requêtes est plus délicate : cela peut revenir à créer index spéciaux (ou les index en premier lieu), modifier (éventuellement dénormaliser) le modèle de données ou modifier l'approche fondamentale adoptée par l'application lorsqu'il s'agit de travailler avec la base de données.Voir par exemple le Pagination faite à la manière de Postgres parler par Markus Winand sur la façon de repenser le concept de pagination pour le rendre plus efficace dans les bases de données

Mesurer les requêtes lentement

Mais pour comprendre quelles requêtes doivent être examinées en premier, vous devez savoir à quelle fréquence elles sont exécutées et combien de temps elles durent en moyenne.

Une approche consiste à enregistrer toutes les requêtes (ou « lentes »), y compris leur exécution, puis à analyser le journal des requêtes.Un bon outil pour cela est pgfouine qui a déjà été mentionné plus tôt dans cette discussion, il a depuis été remplacé par pgbadger qui est écrit dans un langage plus convivial, est beaucoup plus rapide et maintenu de manière plus active.

Les deux pgfouine et pgbadger souffrent du fait qu'ils ont besoin d'activer la journalisation des requêtes, ce qui peut entraîner une baisse notable des performances de la base de données ou vous entraîner dans des problèmes d'espace disque, en plus du fait que l'analyse du journal avec l'outil peut prendre un certain temps et ne le fera pas. vous donner des informations à jour sur ce qui se passe dans la base de données.

L'accélérer avec des extensions

Pour remédier à ces lacunes, il existe désormais deux extensions qui suivent les performances des requêtes directement dans la base de données : pg_stat_statements (ce qui n'est utile que dans la version 9.2 ou plus récente) et pg_stat_plans.Les deux extensions offrent la même fonctionnalité de base : suivre la fréquence à laquelle une « requête normalisée » donnée (chaîne de requête moins tous les littéraux d'expression) a été exécutée et combien de temps cela a pris au total.Étant donné que cela est effectué pendant que la requête est réellement exécutée, cela se fait de manière très efficace, la surcharge mesurable était inférieure à 5 % dans les benchmarks synthétiques.

Donner du sens aux données

La liste des requêtes elle-même est très « sèche » du point de vue informationnel.Des travaux ont été réalisés sur une troisième extension pour tenter de résoudre ce problème et d'offrir une représentation plus agréable des données appelée pg_statsinfo (avec pg_stats_reporter), mais c'est un peu une entreprise pour le rendre opérationnel.

Pour offrir une solution plus pratique à ce problème, j'ai commencé à travailler sur un projet commercial axé sur pg_stat_statements et pg_stat_plans et augmente les informations collectées par de nombreuses autres données extraites de la base de données.C'est appelé pganalyze et vous pouvez le trouver sur https://pganalyze.com/.

Pour offrir un aperçu concis des outils et projets intéressants dans le domaine de surveillance Postgres, j'ai également commencé à dresser une liste au Wiki Postgres qui est mis à jour régulièrement.

J'ai un peu utilisé pgtop.C'est assez grossier, mais au moins je peux voir quelle requête est en cours d'exécution pour chaque ID de processus.

J'ai essayé pgfouine, mais si je me souviens bien, c'est un outil hors ligne.

Je suit également le fichier psql.log et définis les critères de journalisation à un niveau où je peux voir les requêtes problématiques.

#log_min_duration_statement = -1        # -1 is disabled, 0 logs all statements
                                        # and their durations, > 0 logs only
                                        # statements running at least this time.

J'utilise également EMS Postgres Manager pour effectuer des tâches administratives générales.Il ne fait rien pour vous, mais il facilite la plupart des tâches et simplifie la révision et la configuration de votre schéma.Je trouve que lorsque j'utilise une interface graphique, il m'est beaucoup plus facile de repérer les incohérences (comme un index manquant, des critères de champ, etc.).Ce n'est que l'un des deux programmes que je suis prêt à utiliser VMWare sur mon Mac.

Munin est assez simple mais efficace pour obtenir des tendances sur l'évolution et les performances de la base de données au fil du temps.Dans le kit standard de Munin, vous pouvez entre autres surveiller la taille de la base de données, le nombre de verrous, le nombre de connexions, les analyses séquentielles, la taille du journal des transactions et les requêtes de longue durée.

Facile à configurer et à démarrer et si nécessaire, vous pouvez écrire votre propre plugin assez facilement.

Découvrez les derniers plugins postgresql fournis avec Munin ici :

http://munin-monitoring.org/browser/branches/1.4-stable/plugins/node.d/

Eh bien, la première chose à faire est d'essayer toutes vos requêtes depuis psql en utilisant "expliquer" et de voir s'il existe des analyses séquentielles qui peuvent être converties en analyses d'index en ajoutant des index ou en réécrivant la requête.

En dehors de cela, je suis aussi intéressé que vous par les réponses à cette question.

Découvrez Lightning Admin, il dispose d'une interface graphique pour capturer les instructions de journal, pas parfaite mais fonctionne très bien pour la plupart des besoins. http://www.amsoftwaredesign.com

DBTuna http://www.dbtuna.com/postgresql_monitor.php a récemment commencé à prendre en charge la surveillance PostgreSQL.Nous l'utilisons largement pour la surveillance MySQL, donc s'il fournit la même chose pour Postgres, il devrait également vous convenir.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top