欢迎投稿

今日深度:

详解MySQL查看执行慢的SQL语句(慢查询),

详解MySQL查看执行慢的SQL语句(慢查询),


目录
  • 慢查询日志
    • 慢日志常用配置项
    • 查看是否开启慢查询日志
    • 开启慢查询(临时,当前会话有效)
    • 查看慢查询日志存放文件位置
    • 查看long_query_time阈值
    • 设置long_query_time阈值(临时,当前会话有效)
    • 直接修改配置文件(全局,需要重启服务,慎重)
  • 测试
    • 慢查询日志文件分析
      • 单条记录结构
      • 慢查询日志分析-mysqldumpslow
      • 慢查询日志分析-Navicat Monitor
    • 其他细节
      • 记录管理语句
      • 记录未走索引的SQL语句
      • 慢查询日志输出位置
    • 参考资料

      慢查询日志

      查看执行慢的SQL语句,需要先开启慢查询日志。
      MySQL 的慢查询日志,记录在 MySQL 中响应时间超过阀值的语句(具体指运行时间超过 long_query_time 值的SQL。long_query_time 的默认值为10,意思是运行10秒以上(不含10秒)的语句)。

      目的:发现执行时间特别长的SQL查询,进行优化。

      默认情况下,MySQL数据库没有开启慢查询日志,需要我们手动来设置这个参数。

      慢日志常用配置项

      slow_query_log       是否启用慢查询日志,默认为0,可设置为0、1,1表示开启。
      slow_query_log_file  指定慢查询日志位置及名称,默认值为host_name-slow.log,可指定绝对路径。
      long_query_time      慢查询执行时间阈值,超过此时间会记录,默认为10,单位为s。
      log_output           慢查询日志输出目标,默认为file,即输出到文件。
      log_timestamps       主要是控制 error log、slow log、genera log 日志文件中的显示时区,默认使用UTC时区,建议改为 SYSTEM 系统时区。
      log_queries_not_using_indexes    是否记录所有未使用索引的查询语句,默认为off。
      min_examined_row_limit           对于查询扫描行数小于此参数的SQL,将不会记录到慢查询日志中,默认为0。
      log_slow_admin_statements        慢速管理语句是否写入慢日志中,管理语句包含 alter table、create index 等,默认为 off 即不写入

      一般情况下,我们只需开启慢日志记录,配置下阈值时间,其余参数可按默认配置。对于阈值时间,可灵活调整,比如说可以设置为 1s 或 3s 。

      查看是否开启慢查询日志

      show variables like '%slow_query_log%';

      开启慢查询(临时,当前会话有效)

      set global slow_query_log='ON';

      查看慢查询日志存放文件位置

      show variables like '%slow_query_log_file%';

      查看long_query_time阈值

      show variables like '%long_query_time%';

      设置long_query_time阈值(临时,当前会话有效)

      set global long_query_time=3

      直接修改配置文件(全局,需要重启服务,慎重)

      #编辑配置文件
      vim /etc/my.cnf
      
      # 修改配置项(如果没有就加上)
      [mysqld]
      slow_query_log = ON
      slow_query_log_file = /var/lib/mysql/my-slow.log
      long_query_time = 1
      log_timestamps = SYSTEM
      log_output = FILE
      
      # 重启mysqld服务
      systemctl restart mysqld
      
      # 查看mysqld服务
      systemctl status mysqld
      

      测试

      select sleep(5);
      ls /var/lib/mysql/xxx-slow.log

      慢查询日志文件分析

      单条记录结构

      单条记录结构:

      # Time: 2024-03-01T17:12:40.156488+08:00
      # User@Host: panda[panda] @  [192.168.72.1]  Id:     8
      # Query_time: 5.000688  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 1
      SET timestamp=1709284355;
      select sleep(5);
      

      字段说明:
      慢查询日志以#作为起始符。
      Time:查询的时间。
      User@Host:表示用户 和 慢查询查询的ip地址。
      如上所述,表示 root用户 localhost地址。
      Query_time: 表示SQL查询持续时间, 单位 (秒)。
      Lock_time: 表示获取锁的时间, 单位(秒)。
      Rows_sent: 表示发送给客户端的行数。
      Rows_examined: 表示:服务器层检查的行数。
      set timestamp :表示 慢SQL 记录时的时间戳。
      最后 select sleep(5) 则表示慢SQL语句。

      慢查询日志分析-mysqldumpslow

      MySQL自带了一个慢查询分析工具mysqldumpslow。
      试了下不太好使。可以试试:
      Navicat Monitor、signoz、hertzbeat 这些性能监测工具。

      mysqldumpslow ­s c ­t 10 /var/run/mysqld/mysqld­slow.log # 取出使用最多的10条慢查询
      mysqldumpslow ­s t ­t 3 /var/run/mysqld/mysqld­slow.log # 取出查询时间最慢的3条慢查询
      mysqldumpslow ­s t ­t 10 ­g “left join” /database/mysql/slow­log #得到按照时间排序的前10条里面含有左连接的查询语句
      mysqldumpslow ­s r ­t 10 ­g 'left join' /var/run/mysqld/mysqldslow.log # 按照扫描行数最多的

      慢查询日志分析-Navicat Monitor

      官网下载就行了。跟着指引配置即可。
      很舒服,还可以自动提供一些运维建议。

      查询分析

      其他细节

      记录管理语句

      在 MySQL 中,慢查询日志中默认不记录管理语句,如:

      alter table, analyze table,check table

      不过可通过以下属性进行设置:

      mysql> set global log_slow_admin_statements = "ON";
      

      记录未走索引的SQL语句

      在 MySQL 中,还可以设置将未走索引的SQL语句记录在慢日志查询文件中(默认为关闭状态)。通过下述属性即可进行设置:

      mysql> set global log_queries_not_using_indexes = "ON";
      Query OK, 0 rows affected (0.00 sec)

      SQL 复制 全屏

      慢查询日志输出位置

      在MySQL中,日志输出格式有支持:FILE(默认),TABLE 两种,可进行组合使用。如下所示:

      set global log_output = "FILE,TABLE";

      这样设置会同时在 FILE, mysql库中的slow_log表中同时写入。

      select * from mysql.slow_log;

      参考资料

      https://www.navicat.com.cn/company/aboutus/blog/456-使用-mysql-慢速查询日志.html

      到此这篇关于MySQL查看执行慢的SQL语句(慢查询)的文章就介绍到这了,更多相关MySQL查看SQL语句内容请搜索PHP之友以前的文章或继续浏览下面的相关文章希望大家以后多多支持PHP之友!

      您可能感兴趣的文章:
      • mysql开启慢查询(EXPLAIN SQL语句使用介绍)
      • 使用mysql语句查看数据库表所占容量空间大小
      • MySQL慢查询日志超详细总结
      • 总结12个MySQL慢查询的原因分析
      • MySQL定位并优化慢查询sql的详细实例
      • MySQL优化方案之开启慢查询日志

      www.htsjk.Com true http://www.htsjk.com/Mysql/47857.html NewsArticle 详解MySQL查看执行慢的SQL语句(慢查询), 目录 慢查询日志 慢日志常用配置项 查看是否开启慢查询日志 开启慢查询(临时,当前会话有效) 查看慢查询日志存放文件位置 查看long_query_t...
      评论暂时关闭