MySQL慢SQL排查

开启

# 开启
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;

慢SQL日志解析

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,意思是不经过缓存取数据,一般都是单表查询的全表数据,数据库备份时调用这样的语句来获取单表全量数据进行备份。

上一篇:v-show的值为数组的某个值,不起作用的情况


下一篇:动态效果折线图