您现在的位置是:群英 > 数据库 > MySQL数据库
MySQL慢查询日志怎样启动和操作?
Admin发表于 2021-12-22 20:32:40353 次浏览

    这篇文章我们来了解MySQL慢查询日志的相关内容,下文会给大家介绍慢查询日志的启动、设置和修改等操作,有需要的朋友可以参考,希望能对大家有帮助,那么接下来就跟随小编来一起了解一下吧!

    Mysql有一项功能可以记录长时间查询的慢记录,具体是多长时间可以自己配置,但是慢查询也未必就是不良的SQL,也可能受其他查询影响,或者是系统资源限制导致的,它也是我们常用的性能分析工具。【相关推荐:mysql视频教程】

    MySQL的慢查询日志由long_query_timemin_examined_row_limit控制的,前者意思是如果查询花费的时间超过这么多秒,MySQL服务器就是在启用慢查询日志的情况下,将这条记录到慢查询日志文件中。

启用慢查询日志

    要在 MySQL 中启用慢查询日志,请按照下列步骤操作:

    首先看看MySQL中关于慢查询的状态。

MariaDB [(none)]> show variables like '%slow%';
+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------+                                                                                           
| Variable_name                | Value                                                                                                                                |                                                                                           
+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------+                                                                                           
| log_slow_admin_statements    | ON                                                                                                                                   |
| log_slow_disabled_statements | sp                                                                                                                                   |
| log_slow_filter              | admin,filesort,filesort_on_disk,filesort_priority_queue,full_join,full_scan,query_cache,query_cache_miss,tmp_table,tmp_table_on_disk |
| log_slow_rate_limit          | 1                                                                                                                                    |
| log_slow_slave_statements    | ON                                                                                                                                   |
| log_slow_verbosity           |                                                                                                                                      |
| slow_launch_time             | 2                                                                                                                                    |
| slow_query_log               | OFF                                                                                                                                  |
| slow_query_log_file          | hxl-slow.log                                                                                                                         |
+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------+
9 rows in set (0.001 sec)

    首先看slow_query_log的状态,他代表慢查询日志是否开启。该值可以是0或OFF表示禁用,1或ON表示启用。日志输出的目的地由log_output系统变量控制,如果该值为NONE,则即使启用了慢查询日志,也不会写入到日志中,log_output变量的取值如下:

  • TABLE: (默认)向mysql.general_log表写入一般查询,向表mysql.slow_log写入慢速查询 。
  • FILE:将一般和慢速查询日志写入文件系统。
  • NONE – 禁用日志记录。

    还有general_log_fileslow_query_log_file 变量代表查询日志和慢查询日志文件的名称。可以在服务器启动或运行时设置这些变量。

    启动慢查询日志

    MySQL中默认关闭了慢查询日志功能,因此要打开此功能,我们需要将slow_query_log设置为ON,如下所示。

SET GLOBAL slow_query_log = 1;

    设置记录时长

    long_query_time变量表示只有运行时间超过此值就会被记录,如下所示,更改时间为5秒,他默认为10秒,最小值为 0。

SET GLOBAL long_query_time = 5;

    修改输出位置

    默认情况下,慢查询日志文件位于 /var/lib/mysql/hostname-slow.log,我们还可以使用slow_query_log_file变量设置另一个位置。

SET GLOBAL slow_query_log_file = '/var/log/mysql/mysql-slow.log';

    将慢查询日志写入表

    慢查询日志也可以被写入slow_log表中,方式就是上述中所说修改log_output系统变量为TABLE,操作如下:

SET GLOBAL log_output='TABLE';

慢查询日志相关的变量

  • slow_query_log - 启用/禁用慢查询日志
  • log_output - 如何写入输出
  • slow_query_log_file - 慢查询日志文件的名称
  • long_query_time - 定义慢查询的时间(以秒/微秒为单位)
  • log_queries_not_using_indexes - 是否记录不使用索引的查询
  • log_slow_admin_statements - 是否记录某些管理语句
  • log_slow_disabled_statements - 不应记录在慢查询日志中的语句类型
  • min_examined_row_limit - 查询必须检查的最小行数才能变慢
  • log_slow_rate_limit - 允许记录一部分慢查询
  • log_slow_verbosity - 日志中的详细信息量
  • log_slow_filter - 限制要记录的查询

分析慢查询

    日志记录后,我们还需要分析这些日志,找出影响系统的查询,MySQL提供了一个名为mysqldumpslow的工具,可以简单的显示结果,只需要把日志路径传递给他即可,如下:

# mysqldumpslow -a mysql-slow.log

Reading mysql slow query log from mysql-slow.log
Count: 1  Time=0.00s (0s)  Lock=0.00s (0s)  Rows_sent=21.0 (21), Rows_examined=21.0 (21), Rows_affected=0.0 (0), root[root]@localhost
  show databases

Count: 1  Time=0.00s (0s)  Lock=0.00s (0s)  Rows_sent=2.0 (2), Rows_examined=2.0 (2), Rows_affected=0.0 (0), root[root]@localhost
  select * from users

Count: 1  Time=0.00s (0s)  Lock=0.00s (0s)  Rows_sent=1.0 (1), Rows_examined=0.0 (0), Rows_affected=0.0 (0), root[root]@localhost
  select @@version_comment limit 1

Count: 1  Time=0.00s (0s)  Lock=0.00s (0s)  Rows_sent=1.0 (1), Rows_examined=0.0 (0), Rows_affected=0.0 (0), root[root]@localhost

    他的参数如下

  • -s ,按照什么方式起来排序。默认at,也就是按照平均查询时间来排序。都是按照倒序排列。

    al: average lock time 平均锁定时间

    ar: average rows sent 平均返回行数

    at: average query time 平均查询时间

    c: count 总执行次数

    l: lock time 总锁定时间

    r: rows sent 总返回行数

    t: query time 总查询时间

  • -t ,show the top n queries,显示前多少名的记录

  • -a ,默认不开启这个选项。mysqldumpslow将相似的SQL的值(字符串或者数字)替换为N,开启该选项,则显示真实值。不开启该选项,有点类似于Oracle的绑定变量的记录。\

  • -g ,类似于grep命令,过滤出需要的信息。如,只查询A表的慢查询记录。\

  • -l ,总时间中包含锁定时间

    关于MySQL慢查询日志的启动、设置和修改等操作就介绍到这,上述示例具有一定的借鉴价值,感兴趣的朋友可以参考,希望能对大家有帮助,想要了解更多MySQL慢查询日志的内容,大家可以关注其它的相关文章。

    文本转载自PHP中文网

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

相关信息推荐
2022-05-11 11:57:25 
摘要:在oracle中,可以利用unpivot()函数实现列转行,其SQL语句为“select 字段列表 from 数据集 unpivot(自定义列名/*列的值*/ for 自定义列名 in (列名列表))”。
2021-11-25 17:48:34 
摘要:这篇文章主要介绍用ProxySQL怎样实现MySQL读写分离,本文具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章能有所收获,接下来小编带着大家一起了解看看。
2022-04-27 11:27:01 
摘要:给大家带来一篇关于MySQL如何批量替换字段中的字符串的相关教程文章,内容涉及到MySQL、字符串、批量替换、批量替换 MySQL 指定字段中的字符串等相关内容,已被671人关注,更多关于批量替换 MySQL 指定字段中的字符串的内容希望能够帮助到大家。
群英网络助力开启安全的云计算之旅
立即注册,领取新人大礼包
  • 联系我们
  • 24小时售后:4006784567
  • 24小时TEL :0668-2555666
  • 售前咨询TEL:400-678-4567

  • 官方微信

    官方微信
Copyright  ©  QY  Network  Company  Ltd. All  Rights  Reserved. 2003-2019  群英网络  版权所有   茂名市群英网络有限公司
增值电信经营许可证 : B1.B2-20140078   粤ICP备09006778号
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
微信公众号
返回顶部
返回顶部 返回顶部