什么是慢查询

顾名思义,执行很慢的查询,那很慢的标准是什么?

我们可以通过查询 long_query_time 变量查看当前数据库慢查询的阀值是多少;

show variables like 'long_query_time';

mysql_long_query_time

但是数据库默认是把慢查询日志给关闭的,那怎么知道现在数据库慢查询是开还是关呢?

show variables like 'slow_query_log';

mysql_slow_query_log

默认是关闭,如果打开了,就会变成 ON;那如何将慢查询打开呢?

我们可以通过执行:

set global slow_query_log = 1/on;

进行开启,关闭改成 0/off

但是通过这种方式无法持久化,mysql 重启之后又会恢复默认值,那如何才能修改默认配置呢?这个时候我们就来看看 my.cnf 文件。

my.cnf 配置

long_query_time = 10
log-slow-queries = /var/lib/mysql/mysql-slow.log

long_query_time 是指执行超过多久的SQL会被日志记录下来,这里是 10 秒。 log-slow-queries 是指日志保存在哪里,为空的时候,系统会给慢查询日志赋予主机名,并加上slow.log;如果设置了参数 log-long-format,那么所有没有使用索引的查询也将被记录.

这是一个非常有用的日志。它对于性能的影响不大。

慢查询解读

# Time: 210121  6:00:47
# User@Host: xxx[xxx] @ xxxx [10.252.15.11]
# Query_time: 2.936062  Lock_time: 0.000171 Rows_sent: 0  Rows_examined: 54522
SET timestamp=1611180047;
select * from xxxxxx;

第一行:记录时间

第二行:用户名 、用户的IP信息、线程ID号

第三行:执行花费的时间【单位:毫秒】、执行获得锁的时间、获得的结果行数、扫描的数据行数

第四行:这SQL执行的时间戳

第五行:具体的SQL语句