Langsame Abfragen finden
Diese Seite richtet sich an Datenbankadministratoren, die das SQL suchen, das eine Exponential-Seite langsam macht. Sie beantwortet: welche Schalter die Anweisungen einer Anfrage zeigen, wie Sie sie auf die langsamen begrenzen, wie Sie Anweisungen je Anfrage über die Zeit zählen, was Oracle hinzufügt und wie das zu den eigenen Werkzeugen Ihrer Engine passt.
Inhalt
- Zuerst: Liegt es an der Datenbank?
- Anweisungen in der Debug-Ausgabe
- EXPLAIN auf MySQL und MariaDB
- Unausgeglichene Transaktionen
- Der SQL-Profiler
- Das Log langsamer Abfragen von Oracle
- Die eigenen Werkzeuge der Engine
- Checkliste
Zuerst: Liegt es an der Datenbank?
Die meisten Anfragen werden von Caches beantwortet, bevor sie die Datenbank erreichen (Leistung und Skalierung). Messen Sie zuerst:
php bin/php/console exp:benchmark --helpexp:benchmark misst Seitenzeiten über HTTP, vergleicht Server und führt Kernel-Proben aus, darunter den Weg zur Datenbank und
zurück; --save und --baseline erkennen eine Verlangsamung zwischen zwei Läufen (Benchmark).
Anweisungen in der Debug-Ausgabe
Schalten Sie die Debug-Ausgabe nur für Ihre eigene Adresse ein, nie für alle:
# settings/override/site.ini.append.php
[DebugSettings]
DebugOutput=enabled
DebugByIP=enabled
DebugIPList[]=203.0.113.10
[DatabaseSettings]
SQLOutput=enabled
# only statements slower than this many milliseconds (0: all)
SlowQueriesOutput=50Leeren Sie den INI-Cache (php bin/php/ezcache.php --clear-tag=ini --allow-root-user), starten Sie Velocity neu, wenn es die
Website ausliefert, und laden Sie die Seite: Die Debug-Ausgabe listet die Anweisungen mit ihren Zeiten, auf jeder Engine
(12.4 Debug-Ausgabe). Schalten Sie sie wieder aus, wenn Sie fertig sind;
die Ausgabe zeigt Pfade, Abfragen und Einstellungen.
EXPLAIN auf MySQL und MariaDB
[DatabaseSettings]
SQLOutput=enabled
QueryAnalysisOutput=enabledfügt der Debug-Ausgabe MySQLs EXPLAIN jeder Anweisung hinzu. Es funktioniert nur auf MySQL und MariaDB. Auf anderen Engines
kopieren Sie eine Anweisung aus der Debug-Ausgabe und führen selbst EXPLAIN (PostgreSQL, SQLite: EXPLAIN QUERY PLAN) oder
EXPLAIN PLAN FOR (Oracle) aus.
Unausgeglichene Transaktionen
[DatabaseSettings] DebugTransactions=enabled hält für jedes Begin und Commit einen Stacktrace fest, um eine Transaktion zu
finden, die geöffnet und nie geschlossen wurde. Verwenden Sie es nur, während Sie untersuchen.
Der SQL-Profiler
eZDBInterface::profileSQL() schreibt je Anfrage eine Zeile nach var/tmp/sql_profile.log: Anweisungen, SELECTs,
verschiedene SELECTs, exakte Wiederholungen, Zeit in der Datenbank und in den Wiederholungen. Er ist aus, solange
var/tmp/sql_profile.on nicht existiert; der Schalter unter Setup > Systeminformationen (Feld Datenbankabfragen,
Richtlinie setup/managecache) legt diese Datei an und entfernt sie. In 6.0.15 ruft ihn nur der MySQL-Treiber (eZMySQLiDB)
auf, er zählt also Anweisungen auf MySQL und MariaDB.
Er zählt die Anweisungen, die die Datenbank erreicht haben: Mit eingeschaltetem Abfrage-Cache ist eine gecachte Antwort nicht darin, was ihn zum Werkzeug macht, um zu sehen, was der Cache übrig lässt (Der SQL-Abfrage-Cache). Viele exakte Wiederholungen auf einer Seite deuten auf Code, der dieselbe Abfrage in einer Schleife ausführt.
Das Log langsamer Abfragen von Oracle
Die Erweiterung ezoracle schreibt langsame Anweisungen nach var/log/oracle-slow.log, wenn
ezoracle.ini [LogSettings] SlowQueryThreshold gesetzt ist; MaskLiterals maskiert Zeichenkettenliterale, sodass das Log keine
Inhalte enthält. [TraceSettings] kennzeichnet jede Session in V$SESSION mit Siteaccess, Modul und View, sodass AWR- und
ASH-Berichte zeigen, welche Seite eine Anweisung ausgeführt hat
(Oracle: persistente Verbindungen, DRCP und Tuning). ext:ezoracle:report --top-sql
listet die schwersten Anweisungen aus V$SQL.
Die eigenen Werkzeuge der Engine
Das Log langsamer Abfragen von MySQL und MariaDB, pg_stat_statements und log_min_duration_statement auf PostgreSQL, der
Profiler von MongoDB und AWR von Oracle sind Funktionen der Server, nicht von Exponential. Sie sehen jede Anweisung jedes
Prozesses (Web, Velocity, Cron), ohne die Einstellungen der Website anzufassen, und sind die richtigen Werkzeuge für die
Produktion. Verwenden Sie die Debug-Ausgabe, um eine Anweisung einer Seite zuzuordnen.
Checkliste
- To do: Vor und nach einer Änderung mit
exp:benchmarkgemessen. - To do: Debug-Ausgabe auf Ihre Adresse beschränkt und danach ausgeschaltet.
- To do: Das eigene Log langsamer Abfragen der Engine mit einem sinnvollen Schwellenwert eingeschaltet.
- To do: Wiederholte Anweisungen an diejenigen gemeldet, die die Erweiterung oder das Template pflegen.
Verwandte Seiten
- Leistung und Skalierung
- Eine gehostete Website messen
- Betriebsanleitung für eine langsame Website
- Freie Dokumentation: Diese Seite darf unter der GNU FDL 1.3 frei kopiert, übersetzt und verbessert werden.
Werden Sie Exponential-Partner
Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.