# 开启 set global slow_query_log ='ON'; # 设置慢SQL日志文件路径 set global slow_query_log_file = '/var/log/mysql-slow-query.log'; # 设置慢SQL阈值(单位:秒) set global long_query_time = 1;
# 查看慢SQL相关配置 SHOW VARIABLES like '%slow%'; # 查看慢SQL阈值 SHOW VARIABLES like '%long%'; # 查看慢SQL数量 SHOW GLOBAL STATUS LIKE '%Slow_queries%'; # 查看innodb引擎死锁情况 SHOW ENGINE INNODB STATUS;
SELECT * FROM XXX WHERE XXX # 慢SQL语句 Time # 出现该慢SQL的时间, eg:2022-01-17T20:00:03.637443Z User@Host # 语句执行用户, eg:root[root] @ [127.0.0.1] query_time # 慢SQL执行时间, 单位:秒, eg:1.418864 lock_time # 取锁耗时, 获取访问记录锁耗时, 单位:秒, eg:0.000106 rows_sent # SQL返回了多少行,如果做了聚合就不准确了 rows_examined # 执行这条SQL扫描了多少行数据 SET timestamp # 时间戳, eg:1642489616
如果有数据库备份,那慢SQL语句会被变成下面这样
SELECT /*!40001 SQL_NO_CACHE */ * FROM `sys_operation_log`;
该语句不是注释,是合法可执行的SQL,意思是不经过缓存取数据,一般都是单表查询的全表数据,数据库备份时调用这样的语句来获取单表全量数据进行备份。