Was läuft gerade: aktive Sessions, Latenz, Sperren und Transaktionen (sys.session)
MySQLPerformanceBefehl
SELECT conn_id, user, db, command, state, time,
LEFT(current_statement, 100) AS current_statement,
statement_latency, progress, lock_latency,
rows_examined, full_scan, tmp_disk_tables,
trx_state, trx_latency, last_wait
FROM sys.session
WHERE command <> 'Sleep' OR trx_state = 'ACTIVE'
ORDER BY time DESC
LIMIT 25;Was es tut
Ergänzt SHOW PROCESSLIST um performance_schema-Daten: Latenz der laufenden Anweisung, Fortschritt in Prozent, Sperrwartezeit, untersuchte Zeilen, Full Scan / temporäre Tabelle auf Platte und Status der offenen Transaktion in einer Zeile. Listet auch Sessions im Zustand Sleep, die eine Transaktion offen halten.
Wann einsetzen
In den ersten 30 Sekunden eines Incidents: Welche Abfrage läuft seit wann, wer wartet auf Sperren, welche inaktive Session hält eine Transaktion offen.
Vorsicht
sys.session führt mehrere Joins über performance_schema aus; bei Tausenden Verbindungen kann die Abfrage selbst Sekunden dauern, nutze daher für häufiges Monitoring die x$-Views und LIMIT. progress wird nur mit aktivierten Stage-Instrumenten und für Operationen gefüllt, die Fortschritt melden, etwa ALTER. Eine Session in Sleep mit trx_state=ACTIVE ist eine vergessene Transaktion einer Anwendung / eines Connection-Pools mit autocommit=0, die häufigste Ursache für Metadata-Lock- und Purge-Probleme.
Verwandte Einträge
- Die teuersten Abfragen finden (performance_schema digest)
- 'Waiting for table metadata lock' diagnostizieren und den eigentlichen Blocker finden
- InnoDB-Deadlocks analysieren und alle protokollieren
- Lang laufende Transaktionen und History List Length (Purge-Rückstand)
- Kurzzeitig ein vollständiges Slow Log aufzeichnen und mit pt-query-digest analysieren
- Einen schlechten Plan mit EXPLAIN ANALYZE und dem Optimizer Trace untersuchen