Frage

Ich richte eine Webanwendung mit einem FreeBSD-PostgreSQL-Backend ein.Ich suche nach einem Tool/einer Technik zur Optimierung der Datenbankleistung.

War es hilfreich?

Lösung

pgfouine funktioniert bei mir ziemlich gut.Und es sieht so aus, als gäbe es eine FreeBSD-Port dafür.

Andere Tipps

Datenbankoptimierung ist normalerweise eine Kombination aus zwei Dingen

  1. Reduzieren Sie die Anzahl der Abfragen an die Datenbank
  2. Reduzieren Sie die Datenmenge, die zur Beantwortung von Anfragen untersucht werden muss

Die Reduzierung der Anzahl der Abfragen erfolgt normalerweise durch Zwischenspeichern nichtflüchtiger/weniger wichtiger Daten (z. B.„Welche Benutzer sind online“ oder „Was sind die neuesten Beiträge dieses Benutzers?“) innerhalb der Anwendung (falls möglich) oder in einem externen – effizienteren – Datenspeicher (Memcached, Redis usw.).Wenn Sie Informationen haben, die sehr schreibintensiv sind (z. B.Trefferzähler) und braucht nicht SÄURE-Semantik können Sie auch darüber nachdenken, sie aus der Postgres-Datenbank in effizientere Datenspeicher zu verschieben.

Die Optimierung der Abfragelaufzeit ist schwieriger – dies kann einer Erstellung gleichkommen spezielle Indizes (oder Indizes in erster Linie), das Datenmodell ändern (möglicherweise denormalisieren) oder den grundlegenden Ansatz ändern, den die Anwendung bei der Arbeit mit der Datenbank verfolgt.Siehe zum Beispiel die Die Paginierung erfolgt nach Postgres-Art Sprechen Sie vorbei Markus Winand darüber, wie man das Konzept der Paginierung überdenken kann, um es datenbankeffizienter zu machen

Abfragen langsam messen

Um jedoch zu verstehen, welche Abfragen zuerst betrachtet werden sollten, müssen Sie wissen, wie oft sie ausgeführt werden und wie lange sie im Durchschnitt dauern.

Ein Ansatz hierfür besteht darin, alle (oder „langsamen“) Abfragen einschließlich ihrer Laufzeit zu protokollieren und dann das Abfrageprotokoll zu analysieren.Ein gutes Werkzeug hierfür ist pgfouine das bereits früher in dieser Diskussion erwähnt wurde, wurde inzwischen durch ersetzt pgbadger das in einer freundlicheren Sprache geschrieben ist, viel schneller ist und aktiver gepflegt wird.

Beide pgfouine Und pgbadger leiden unter der Tatsache, dass die Abfrageprotokollierung aktiviert sein muss, was zu einem spürbaren Leistungseinbruch in der Datenbank führen kann oder Probleme mit dem Speicherplatz auf der Festplatte verursachen kann. Darüber hinaus kann das Parsen des Protokolls mit dem Tool einige Zeit in Anspruch nehmen, was jedoch nicht der Fall ist geben Ihnen aktuelle Einblicke in die Vorgänge in der Datenbank.

Beschleunigen Sie es mit Erweiterungen

Um diese Mängel zu beheben, gibt es jetzt zwei Erweiterungen, die die Abfrageleistung direkt in der Datenbank verfolgen: pg_stat_statements (was nur in Version 9.2 oder neuer hilfreich ist) und pg_stat_plans.Beide Erweiterungen bieten die gleiche Grundfunktionalität – die Verfolgung, wie oft eine bestimmte „normalisierte Abfrage“ (Abfragezeichenfolge abzüglich aller Ausdrucksliterale) ausgeführt wurde und wie lange es insgesamt gedauert hat.Aufgrund der Tatsache, dass dies geschieht, während die Abfrage tatsächlich ausgeführt wird, geschieht dies auf sehr effiziente Weise, sodass der messbare Overhead bei synthetischen Benchmarks weniger als 5 % betrug.

Den Daten einen Sinn geben

Die Liste der Abfragen selbst ist aus Informationssicht sehr „trocken“.Es wurde an einer dritten Erweiterung gearbeitet, um dieser Tatsache Rechnung zu tragen und eine schönere Darstellung der aufgerufenen Daten anzubieten pg_statsinfo (zusammen mit pg_stats_reporter), aber es ist ein bisschen mühsam, es zum Laufen zu bringen.

Um eine bequemere Lösung für dieses Problem anzubieten, begann ich mit der Arbeit an einem kommerziellen Projekt, das sich auf Folgendes konzentriert pg_stat_statements Und pg_stat_plans und ergänzt die gesammelten Informationen durch viele andere Daten, die aus der Datenbank entnommen werden.Es heißt pganalyze und Sie finden es unter https://pganalyze.com/.

Um einen kompakten Überblick über interessante Tools und Projekte im Postgres-Monitoring-Bereich zu bieten, habe ich außerdem damit begonnen, eine Liste zusammenzustellen Postgres-Wiki welches regelmäßig aktualisiert wird.

Ich habe pgtop ein wenig verwendet.Es ist ziemlich grob, aber zumindest kann ich sehen, welche Abfrage für jede Prozess-ID ausgeführt wird.

Ich habe pgfouine ausprobiert, aber wenn ich mich erinnere, ist es ein Offline-Tool.

Außerdem beobachte ich die Datei psql.log und stelle die Protokollierungskriterien auf eine Ebene ein, auf der ich die Problemabfragen sehen kann.

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

Ich verwende EMS Postgres Manager auch für allgemeine Verwaltungsarbeiten.Es bringt Ihnen zwar nichts, erleichtert aber die meisten Aufgaben und vereinfacht die Überprüfung und Einrichtung Ihres Schemas.Ich finde, dass es mir bei der Verwendung einer GUI viel leichter fällt, Inkonsistenzen zu erkennen (z. B. ein fehlender Index, fehlende Feldkriterien usw.).Es ist nur eines von zwei Programmen, die ich bereit bin, VMWare auf meinem Mac zu verwenden.

Munin ist recht einfach, aber effektiv, um Trends zur Entwicklung und Leistung der Datenbank im Laufe der Zeit zu ermitteln.Im Standard-Kit von Munin können Sie unter anderem die Größe der Datenbank, die Anzahl der Sperren, die Anzahl der Verbindungen, sequentielle Scans, die Größe des Transaktionsprotokolls und lang laufende Abfragen überwachen.

Einfach einzurichten und zu starten. Bei Bedarf können Sie ganz einfach Ihr eigenes Plugin schreiben.

Schauen Sie sich hier die neuesten Postgresql-Plugins an, die mit Munin geliefert werden:

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

Nun, als Erstes sollten Sie alle Ihre Abfragen von psql mit „explain“ ausprobieren und prüfen, ob es sequentielle Scans gibt, die durch Hinzufügen von Indizes oder Umschreiben der Abfrage in Index-Scans umgewandelt werden können.

Ansonsten interessieren mich die Antworten auf diese Frage genauso wie Sie.

Schauen Sie sich Lightning Admin an. Es verfügt über eine GUI zum Erfassen von Protokollanweisungen, die nicht perfekt ist, aber für die meisten Anforderungen hervorragend funktioniert. http://www.amsoftwaredesign.com

DBTuna http://www.dbtuna.com/postgresql_monitor.php hat vor kurzem damit begonnen, die PostgreSQL-Überwachung zu unterstützen.Wir verwenden es häufig für die MySQL-Überwachung. Wenn es also dasselbe für Postgres bietet, sollte es auch für Sie gut geeignet sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top