• 技术文章 >数据库 >mysql教程

    MySQL慢查询日志实操(图文解析)

    WBOYWBOY2022-09-14 19:43:52转载819

    php入门到就业线上直播课:进入学习

    推荐学习:mysql视频教程

    一、概述

    MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值(long_query_time,单位:秒)的SQL语句。默认情况下,MySQL不启动慢查询日志。本文简单介绍如何开启慢查询日志,如何用mysqldumpslow分析慢查询。

    二、慢查询日志设置

    1、临时设置

    临时开启慢查询日志(重启失效)

    set global slow_query_log = on;

    注:如果想关闭慢查询日志,只需要执行 set global slow_query_log = off; 即可。

    临时慢查询时间临界点 查询时间高于这个临界点的都会被记录到慢查询日志中(重启失效)

    set long_query_time = 1;

    设置慢查询存储的方式(重启失效)

    set global  log_output = file;

    说明: 可以看到,我这里设置为了file,就是说我的慢查询日志是通过file体现的,默认是none,我们可以设置为table或者file,如果是table则慢查询信息会保存到mysql库下的slow_log表中。

    2、查询慢查询日志的开启状态和慢查询日志储存的位置

    show variables like '%quer%';

    参数说明:

    log_queries_not_using_indexes 如果值设置为ON,则会记录所有没有利用索引的查询(性能优化时开启此项,平时不要开启)

    3、查看存放日志的形式

    show variables like 'log_output';

    4、永久开启慢日志

    修改my.cnf

    在配置文件my.cnf(一般为/etc/my.cnf)中的[mysqld] section增加如下参数。

    [mysqld]slow_query_log= 1slow_query_log_file= /var/lib/mysql/slow-query.log # 若没有指定,默认名字为hostname_slow.loglong_query_time= 1log_queries_not_using_indexes= 1

    其中,slow_query_log = 1,表示开启慢查询,0表示关闭

    slow_query_log_file,指定慢查询日志路径,需要MySQL对该路径有写权限

    long_query_time = 1,表示查询时间>=1秒才记录日志,默认10s

    log_queries_not_using_indexes = 1,表明记录没有使用索引的 SQL 语句

    重启MySQL服务,重启MySQL后会看到/var/lib/mysql/slow-query.log文件。

    三、慢查询测试

    制造慢查询并执行。如下:

    mysql> select sleep(1);+----------+
    | sleep(1) |
    +----------+
    | 0 |
    +----------+
    1 row in set (1.00 sec)

    慢查询日志

    打开慢查询日志文件。可以看到上述慢查询的SQL语句被记录到日志中。

    四、慢查询分析工具

    mysqldumpslow

    mysqldumpslow是MySQL自带的分析慢查询的工具。该工具是Perl脚本。

    常用参数如下:

    获取访问次数最多的5个SQL语句:

    按照时间排的top 5个SQL语句

    $ mysqldumpslow -s t -t 5 /var/lib/mysql/slow-query.log

    按照时间排序且含有'like'的top 5个SQL语句

    $ mysqldumpslow -s t -t 3 -g "like" /var/lib/mysql/slow-query.log

    五、MySQL 清理slowlog方法

    SET GLOBAL slow_query_log = 'OFF';
    ALTER TABLEmysql.slow_log RENAME mysql.slow_log_drop;
    CREATE TABLE mysql.slow_log LIKEmysql.slow_log_drop;
    SET GLOBAL slow_query_log = 'ON';
    DROP TABLE mysql.slow_log_drop;

    推荐学习:mysql视频教程

    以上就是MySQL慢查询日志实操(图文解析)的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:脚本之家,如有侵犯,请联系admin@php.cn删除

    千万级数据并发解决方案(理论+实战):点击学习

    Mysql单表千万级数据量的查询优化与性能分析

    Mysql主从原理及其在高并发系统中的应用

    专题推荐:mysql
    上一篇:一文聊聊Mysql锁的内部实现机制 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• mysql中的find_in_set字符串查找函数解析• mysql的10061错误是什么• 一起来聊聊MySQL索引结构• MySQL深入浅出精讲触发器用法• 实例详解MySQL索引最左匹配原则
    1/1

    PHP中文网