Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,059 of 9,059 pages
About the help in other languages
All help pages

Langsame Abfragen finden

Die Werkzeuge, die Exponential einem Datenbankadministrator gibt, um langsames und wiederholtes SQL zu finden - SQLOutput und SlowQueriesOutput in der Debug-Ausgabe, MySQLs EXPLAIN über QueryAnalysisOutput…

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/help/database-administrators/finding-slow-queries.md

On this page

This page is a translation. Read the English original

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

  1. Zuerst: Liegt es an der Datenbank?
  2. Anweisungen in der Debug-Ausgabe
  3. EXPLAIN auf MySQL und MariaDB
  4. Unausgeglichene Transaktionen
  5. Der SQL-Profiler
  6. Das Log langsamer Abfragen von Oracle
  7. Die eigenen Werkzeuge der Engine
  8. 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 --help

exp: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=50

Leeren 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=enabled

fü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:benchmark gemessen.
  • 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

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.

Something wrong on this page? Report an error

Documentation license

This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.

Exponential Copyright © 1998-2026 Exponential Foundation and 7x