美文网首页
如何使用慢查询

如何使用慢查询

作者: AD刘涛 | 来源:发表于2020-03-08 23:40 被阅读0次

慢查询的使用

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

定位慢查询

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

  • 查看慢查询日志
  • show processlist 查看正在执行的慢查询

查看慢查询日志

检查慢查询日志是否开启

慢查询可以帮我们找到执行慢的 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。

相关文章

  • 62 mysql 定位慢查询和索引优化

    1 什么是慢查询? 如何定位数据库慢查询? 2,如何使用执行计划EXPLAIN 分析sql语句? 3,EXPLAI...

  • 数据库索引相关问题

    如何定位并优化慢查询Sql 根据慢日志定位慢查询sql 使用explain等工具分析sql 修改sql或者尽量让s...

  • 如何使用慢查询

    慢查询的使用 慢速查询日志可用于查找执行时间较长的查询,这对我们在做sql性能优化有很大帮助。然而,检查一个文件较...

  • 十、慢查询日志设置

    如何发现有问题的sql;使用mysql慢查询日子对有效率问题sql进行监控 是否开始慢查询日志; show var...

  • MySQL优化----SQL语句和索引优化

    sql及索引优化 如何发现有问题的sql? 使用Mysql的慢查询日志对有效率问题的SQL进行监控 慢查询日志所包...

  • mysql索引查询

    参考文档:explain命令mysql慢查询优化 一、主键和索引的区别 二、mysql查询时如何使用索引 三、ex...

  • MySQL性能优化

    MySQL慢查询日志的开启方式 查询是否开启了慢查询日志 设置慢查询日志文件位置 设置是否需要把没有使用到索引的s...

  • MySQL慢查询分析

    开启慢查询日志 慢查询时长设置 开启后重连 记录到表 记录未使用索引的查询 测试 慢查询分析 得到返回记录集最多的...

  • Redis学习--阻塞

    API或数据结构使用不合理 慢查询查询慢查询日记,发现慢查询.1)修改为低算法度的命令,如hgetall改为hmg...

  • 字节跳动后端面经七

    MySQL慢查询如何优化? InnDB存储引擎默认隔离级别,如何实现? InnoDb针对数据库缓冲池管理使用LRU...

网友评论

      本文标题:如何使用慢查询

      本文链接:https://www.haomeiwen.com/subject/qsusdhtx.html