如何使用慢查询

2020-03-08  本文已影响0人  AD刘涛

慢查询的使用

慢速查询日志可用于查找执行时间较长的查询,这对我们在做sql性能优化有很大帮助。然而,检查一个文件较大的查询日志可能是一项耗时的任务。为了简化这一过程,您可以使用mysqldumpslow命令来处理一个慢速查询日志文件并总结其内容。

定位慢查询

当我们在写web api接口时常常会碰到某个接口需要很久才能返回结果,这时我们就应该去检查是不是慢查询导致的。定位慢 SQL 有如下两种解决方案:

查看慢查询日志

检查慢查询日志是否开启

慢查询可以帮我们找到执行慢的 SQL,在使用前,我们需要先看下慢查询是否已经开启,使用下面这条命令即可:

mysql> show variables like '%slow_query_log';
+----------------+-------+
| Variable_name  | Value |
+----------------+-------+
| slow_query_log | OFF   |
+----------------+-------+
1 row in set (0.00 sec)

开启慢查询日志

我们能看到slow_query_log=OFF,也就是说慢查询日志此时是关上的。我们可以把慢查询日志打开,注意设置变量值的时候需要使用 global,否则会报错:

mysql> set global slow_query_log = on;

Query OK, 0 rows affected (0.00 sec)

查看慢查询阀值

接下来我们来看下慢查询的时间阈值设置(默认值是10秒),使用如下命令:

mysql> show variables like '%long_query_time%';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)

设置慢查询阀值

在这里我们一般建议线上业务把 long_query_time 设置为 1 秒,如果你当前业务要求比较高的QPS,可设置慢查询为 0.1 秒。

mysql> set global long_query_time = 1;

Query OK, 0 rows affected (0.00 sec)

确定慢查询日志路径

mysql> show global variables like "datadir";

+---------------+------------------------+
| Variable_name | Value                  |
+---------------+------------------------+
| datadir       | /data/mysql/data/3306/ |
+---------------+------------------------+

1 row in set (0.00 sec)

确定慢查询日志的文件名

mysql> show global variables like "slow_query_log_file";

+---------------------+----------------+
| Variable_name       | Value          |
+---------------------+----------------+
| slow_query_log_file | mysql-slow.log |
+---------------------+----------------+

1 row in set (0.00 sec)

根据上面的查询结果,可以直接查看 /data/mysql/data/3306/mysql-slow.log 文件获取已经执行完的慢查询。

日志文件参数介绍

参数名 含义
Query_time 查询时间
Lock_time 等待表锁的时间
Rows_sent 语句返回的行数
Rows_examined 语句执行期间从存储引擎读取的行数

使用 show processlist

有时慢查询正在执行,已经导致数据库负载偏高了,而由于慢查询还没执行完,因此慢查询日志还看不到任何语句。此时可以使用 show processlist 命令判断正在执行的慢查询。show processlist 显示哪些线程正在运行。

mysql> show processlist\G`
*************************** 1. row ***************************
     Id: 4
   User: root
   Host: localhost
     db: NULL
Command: Query
   Time: 0
  State: starting
   Info: show processlist
1 row in set (0.00 sec)

参数介绍

参数名 含义
db 数据库名
command 连接状态,一般是休眠(sleep),查询(query),连接(connect)
time 连接持续时间,单位是秒
state 显示当前sql语句的状态
info 显示这个sql语句

我们这里可以通过它的执行时间(Time)来判断是否是慢 SQL。

上一篇下一篇

猜你喜欢

热点阅读