MySQL的小知识点(八)

111 阅读2分钟

「这是我参与2022首次更文挑战的第23天,活动详情查看:2022首次更文挑战image.png

定位慢查询

我们使用MySQL的过程中,需要优化我们的sql语句,往往是要先找到执行比较慢的SQL。这个时候我们要定位慢查询的sql,在MySQL中,为我们提供了记录慢查询sql的功能,我们可以通过配置slow_query_log参数来开启MySQL的慢查询日志对查询的sql进行定位。。而参数long_query_time则是为我们提供了配置慢查询时间的选项,比如说我们觉得查询超过一秒才算是慢查询的话就可以通过这个参数取进行配置。当然,记录肯定要有存放的地方,那么在MySQL当中,我们需要用--slow_query_log_file=file_name来配置慢查询日志保存的地方,在后面我们需要用到这个文件来分析我们记录到的慢查询sql。在系统运行了一段时间过后,我们就可以查看到底有哪些查询是超过我们配置的慢查询时间的,可以通过以下语句进行查询:

show global status like '%Slow_queries%'; # 查询一共有多少条慢查询

如果查询出来的慢查询条数大于一,我们这时就可以通过mysqldumpslow来解析慢查询日志,通过mysqldumpslow输出的慢查询日志的详细内容,我们就可以定位到具体的sql语句,之后我们就可以对该语句进行优化了。mysqldumpslow的使用方法如下:

mysqldumpslow [*options*] [*log_file* ...]

如果没有意外的话,我们可以在控制台看到如下类似的输出:

Reading mysql slow query log from /usr/local/mysql/data/mysqld57-slow.log
Count: 1 Time=4.32s (4s) Lock=0.00s (0s) Rows=0.0 (0), root[root]@localhost 
insert into t2 select * from t1

Count: 3 Time=2.53s (7s) Lock=0.00s (0s) Rows=0.0 (0), root[root]@localhost insert into t2   select * from t1 limit N

Count: 3 Time=2.13s (6s) Lock=0.00s (0s) Rows=0.0 (0), root[root]@localhost insert into t1   select * from t1

默认输出的是平均查询时间。