• mysql中慢sql处理方案


    前言
    Mysql的慢查询日志是MySql提供的一种日志记录,它用来记录在Mysql中响应时间超过阈值的SQL语句,具体是指运行时间超过 long_query_time 值的sql会被记录到慢查询日志中。

    开启慢查询
    Mysql默认情况下,是没有开启慢查询日志的,需要我们自己开启数据库的慢查询日志。

    查看是否开启
    show variables like '%slow_query_log%';
    1
    mysql> show variables like '%slow_query_log%';
    +---------------------+------------------------------------------------------+
    | Variable_name       | Value                                                |
    +---------------------+------------------------------------------------------+
    | slow_query_log      | OFF                                                  |
    | slow_query_log_file | /usr/local/mysql/data/slow.log                          |
    +---------------------+------------------------------------------------------+
    2 rows in set (0.00 sec)

    OFF 表示是关闭状态。使用下边的命令进行开启:

    set global slow_query_log=1;
    1
    如果要永久生效的话,需要配置到mysql的配置文件中。

    记录慢查询
    开启慢查询后,只有符合慢查询条件的sql才会记录到慢查询日志里。这个是由
    long_query_time参数控制,默认情况下该值为10秒,也就是说只有查询**超过10秒(此处是大于,而非大于等于)**的sql才会记录到慢查讯日志中。使用如下命令查看:

    show variables like 'long_query_time%';     ## 默认慢查询时间
    1
    mysql> show variables like 'long_query_time%';
    +-----------------+----------+
    | Variable_name   | Value    |
    +-----------------+----------+
    | long_query_time | 3.000000 |
    +-----------------+----------+
    1 row in set (0.00 sec)

    因为本人已经修改过,所以在此显示为3秒钟,修改使用如下命令:

    set global long_query_time=3;  ## 设置慢查询的时间
    1
    该配置同样可以配置在mysql的配置文件里。
    修改之后,可以通过如下命令进行查看。如果看不到变化可以重新打开一个新的控制台进行查看。

    show global variables like 'long_query_time%';
    1
    测试
    使用mysql的sleep()函数进行测试,看看慢查询是不是能被记录

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

    查询当前系统中有多少条慢查询记录,使用如下命令:

    show global status like '%Slow_queries%';
    1
    mysql> show global status like '%Slow_queries%';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | Slow_queries  | 1     |
    +---------------+-------+
    1 row in set (0.00 sec)

    根据如下命令可以知道,慢查询记录在 /usr/local/mysql/data/slow.log 该路径下的slow.log文件中,

    show variables like '%slow_query_log%';
    1
    进入到相应目录下,查看记录:

    /usr/local/mysql/bin/mysqld, Version: 5.7.22 (MySQL Community Server (GPL)). started with:
    Tcp port: 3306  Unix socket: /tmp/mysql.sock
    Time                 Id Command    Argument
    # Time: 2020-04-09T07:03:19.508636Z
    # User@Host: root[root] @ localhost [127.0.0.1]  Id:     5
    # Query_time: 4.005159  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 0
    use bootdo;
    SET timestamp=1586415799;
    select sleep(4);

    至此,慢查询sql已经记录到mysql中去了。
    知道了哪些是慢查询sql,我们后续就可以根据Explain命令进行相应的优化了。
     

  • 相关阅读:
    WebSocket 详细教程
    感受野计算问题
    GuLi商城-商品服务-API-品牌管理-JSR303数据校验
    二进制安全虚拟机Protostar靶场(3)溢出控制程序指针,基础知识讲解 Stack Three,Stack Four
    Mock.js之Element-ui搭建首页导航与左侧菜单
    消息队列中间件面试笔记总结RabbitMQ,Kafka,RocketMQ
    33-SparkSql的介绍、DataFrame和DataSet
    【C++】C/C++内存管理
    深度学习-Python调用ONNX模型
    Python JSON
  • 原文地址:https://blog.csdn.net/plpldog/article/details/132760817