Назад | Перейти на главную страницу

MySQL 5.7 пытается повысить производительность

У нас есть приложение PHP, работающее против MySQL 5.7 с innoDB. Раньше приложение было очень медленным. MySQL очень долго занимает 100% ЦП для некоторых запросов. Я попытался запустить таблицу оптимизации, которую innoDB просто интерпретирует как таблицу повторного создания. Это только ухудшило положение.

Я включил медленное ведение журнала запросов как:

slow_query_log          = ON
long_query_time         = 5
log_queries_not_using_indexes = ON
slow_query_log_file     = /var/log/mysql/mysql-slow.log

Я вижу в журнале только то, что повторяется много раз:

SET timestamp=1516955047;
SELECT * FROM `notification` WHERE `user_id`=4 ORDER BY `created_at` DESC LIMIT 5;
# Time: 2018-01-26T08:24:07.652626Z
# User@Host: root[root] @ localhost []  Id:   153
# Query_time: 0.000221  Lock_time: 0.000107 Rows_sent: 1  Rows_examined: 3
SET timestamp=1516955047;
SELECT
    kcu.constraint_name,
    kcu.column_name,
    kcu.referenced_table_name,
    kcu.referenced_column_name
FROM information_schema.referential_constraints AS rc
JOIN information_schema.key_column_usage AS kcu ON
    (
        kcu.constraint_catalog = rc.constraint_catalog OR
        (kcu.constraint_catalog IS NULL AND rc.constraint_catalog IS NULL)
    ) AND
    kcu.constraint_schema = rc.constraint_schema AND
    kcu.constraint_name = rc.constraint_name
WHERE rc.constraint_schema = database() AND kcu.table_schema = database()
AND rc.table_name = 'notification' AND kcu.table_name = 'notification';
# Time: 2018-01-26T08:24:07.653082Z
# User@Host: root[root] @ localhost []  Id:   153
# Query_time: 0.000155  Lock_time: 0.000040 Rows_sent: 1  Rows_examined: 143

Я хочу, чтобы что-то продолжалось, чтобы можно было улучшить производительность с помощью настройки базы данных. Как мне увидеть список недостающих индексов или что-то в этом роде?

Чтобы проанализировать медленный журнал MySQL, попробуйте инструмент mysqldumpslow https://dev.mysql.com/doc/refman/5.7/en/mysqldumpslow.html

mysqldumpslow /var/log/mysql/mysql-slow.log

Когда вы найдете самый медленный запрос, попробуйте ОБЪЯСНИТЕ https://dev.mysql.com/doc/refman/5.7/en/explain.html Легко использовать:

EXPLAIN SELECT foo FROM slow_something WHERE ...;