performance_schema
P_S (abbreviazione comune)
performance_schema è un database di sistema presente in MySQL dalla versione 5.5, progettato per esporre metriche di esecuzione interne del server senza richiedere strumenti esterni. I dati sono raccolti in memoria tramite strutture a basso overhead e aggiornati in tempo reale.
Come funziona #
Il motore di strumentazione intercetta eventi interni (query, lock, I/O, allocazioni di memoria) e li aggrega in tabelle consultabili via SQL standard. Le principali aree coperte sono:
- Statement digest: statistiche aggregate per query normalizzata (
events_statements_summary_by_digest) - Wait events: attese su mutex, I/O, lock (
events_waits_summary_global_by_event_name) - Memory: allocazioni per thread e per componente (
memory_summary_by_thread_by_event_name)
-- Top 10 query per latenza media
SELECT
digest_text,
count_star,
ROUND(avg_timer_wait / 1e9, 2) AS avg_ms
FROM performance_schema.events_statements_summary_by_digest
ORDER BY avg_timer_wait DESC
LIMIT 10;
L’abilitazione granulare degli strumenti avviene tramite le tabelle setup_instruments e setup_consumers: è possibile attivare solo le categorie necessarie per ridurre l’impatto sul workload.
Quando si usa #
performance_schema è il punto di partenza per qualsiasi analisi di performance su MySQL senza accesso a APM esterni. Scenari tipici:
- Identificare query lente in assenza di slow query log abilitato
- Diagnosticare contese su InnoDB buffer pool o lock di riga
- Monitorare l’utilizzo di memoria per thread in ambienti con molte connessioni concorrenti (rilevante in configurazioni InnoDB Cluster)
Limiti da tenere presenti: i dati sono volatili (si azzerano al restart), le tabelle non sono persistenti su disco, e l’overhead — pur basso — è misurabile su workload ad altissima frequenza di statement brevi.