DBAtlas · Atlas für Datenbankbetrieb

Die teuersten Abfragen finden (performance_schema digest)

MySQLPerformance

Befehl

SELECT SCHEMA_NAME AS db,
       LEFT(DIGEST_TEXT, 80) AS query,
       COUNT_STAR AS calls,
       ROUND(SUM_TIMER_WAIT / 1e12, 2) AS total_sec,
       ROUND(AVG_TIMER_WAIT / 1e9, 2) AS avg_ms,
       ROUND(QUANTILE_95 / 1e9, 2) AS p95_ms,
       ROUND(100 * SUM_TIMER_WAIT / SUM(SUM_TIMER_WAIT) OVER (), 1) AS pct_total,
       ROUND(SUM_ROWS_EXAMINED / NULLIF(COUNT_STAR, 0)) AS rows_exam_per_call,
       ROUND(SUM_ROWS_SENT / NULLIF(COUNT_STAR, 0)) AS rows_sent_per_call,
       SUM_NO_INDEX_USED AS no_index,
       SUM_CREATED_TMP_DISK_TABLES AS tmp_disk,
       LAST_SEEN
FROM performance_schema.events_statements_summary_by_digest
WHERE SCHEMA_NAME IS NOT NULL
ORDER BY SUM_TIMER_WAIT DESC
LIMIT 20;

-- Server-wide top wait events
SELECT events, total, total_latency, avg_latency FROM sys.waits_global_by_latency LIMIT 10;

Was es tut

Ordnet normalisierte Abfragen nach Gesamtzeit mit Aufrufanzahl, durchschnittlicher und p95-Latenz, Anteil an der Gesamtzeit, untersuchten / gesendeten Zeilen pro Aufruf, Ausführungen ohne Index und auf Platte ausgelagerten temporären Tabellen. Die zweite Abfrage zeigt, auf welche Waits (IO, Sperren, Redo) die Zeit entfällt.

Wann einsetzen

Erste Anlaufstelle, wenn CPU- / IO-Last steigt oder Benutzer melden 'die Datenbank ist langsam'; funktioniert auch bei ausgeschaltetem Slow Log.

Vorsicht

Die Werte kumulieren seit dem letzten Neustart oder TRUNCATE TABLE performance_schema.events_statements_summary_by_digest; erstelle zwei Snapshots und vergleiche sie, um die aktuelle Aktivität zu sehen. Die Tabelle ist auf performance_schema_digests_size Zeilen begrenzt; ist sie voll, werden neue Abfragen in einer einzigen Zeile mit NULL-DIGEST zusammengefasst. DIGEST_TEXT wird bei performance_schema_max_digest_length (1024) Bytes abgeschnitten. Zeiten sind in Pikosekunden angegeben. Ein hohes Verhältnis rows_exam_per_call / rows_sent_per_call ist das deutlichste Zeichen für einen fehlenden Index.

In DBAtlas öffnen →

Verwandte Einträge