MySQL Performance Schema
Performance Schema — встроенный инструмент диагностики MySQL, работающий на уровне движка. В отличие от SHOW STATUS, он позволяет отслеживать конкретные запросы, потоки, блокировки и потребление ресурсов в реальном времени.
Включение Performance Schema
# Проверить статус
mysql -e "SELECT * FROM performance_schema.setup_instruments LIMIT 5;"
# В my.cnf (включено по умолчанию в MySQL 5.6+)
[mysqld]
performance_schema=ONТоп медленных запросов
-- Топ-10 запросов по суммарному времени выполнения
SELECT
DIGEST_TEXT,
COUNT_STAR AS exec_count,
ROUND(SUM_TIMER_WAIT/1e12, 3) AS total_sec,
ROUND(AVG_TIMER_WAIT/1e12, 6) AS avg_sec,
SUM_ROWS_EXAMINED AS rows_examined
FROM performance_schema.events_statements_summary_by_digest
ORDER BY SUM_TIMER_WAIT DESC
LIMIT 10;Анализ блокировок
-- Текущие блокировки InnoDB
SELECT
r.trx_id waiting_trx_id,
r.trx_mysql_thread_id waiting_thread,
r.trx_query waiting_query,
b.trx_id blocking_trx_id,
b.trx_mysql_thread_id blocking_thread,
b.trx_query blocking_query
FROM information_schema.innodb_lock_waits w
INNER JOIN information_schema.innodb_trx b ON b.trx_id = w.blocking_trx_id
INNER JOIN information_schema.innodb_trx r ON r.trx_id = w.requesting_trx_id;Мониторинг памяти
-- Потребление памяти по компонентам
SELECT
EVENT_NAME,
CURRENT_NUMBER_OF_BYTES_USED / 1024 / 1024 AS current_mb,
HIGH_NUMBER_OF_BYTES_USED / 1024 / 1024 AS peak_mb
FROM performance_schema.memory_summary_global_by_event_name
WHERE CURRENT_NUMBER_OF_BYTES_USED > 0
ORDER BY CURRENT_NUMBER_OF_BYTES_USED DESC
LIMIT 10;Статистика I/O по таблицам
-- Таблицы с наибольшей нагрузкой на чтение/запись
SELECT
OBJECT_SCHEMA,
OBJECT_NAME,
COUNT_READ,
COUNT_WRITE,
COUNT_FETCH,
SUM_TIMER_WAIT / 1e12 AS total_wait_sec
FROM performance_schema.table_io_waits_summary_by_table
ORDER BY SUM_TIMER_WAIT DESC
LIMIT 10;Sys Schema — удобная обёртка
-- sys schema предоставляет читаемые представления
-- Топ запросы по задержке
SELECT * FROM sys.statements_with_runtimes_in_95th_percentile LIMIT 10;
-- Таблицы без индексов
SELECT * FROM sys.schema_tables_with_full_table_scans;
-- Неиспользуемые индексы
SELECT * FROM sys.schema_unused_indexes;Совет: Sys Schema доступна по умолчанию в MySQL 5.7+ и MariaDB 10.6+. Она делает данные Performance Schema читаемыми для людей без написания сложных JOIN-запросов.