美文网首页Java成长之路
【mysql】mysql调优时必须掌握的慢查询语句排查命令

【mysql】mysql调优时必须掌握的慢查询语句排查命令

作者: Java古德 | 来源:发表于2020-08-12 20:47 被阅读0次

    文章目录

    • 前言:

    • 开启并设置慢查询语句的时间

    • 1. 查看是否开启慢查询语句

    • 2. 开启慢查询

    • 3. 修改满查询定义的时间

    • 4. 开启 记录没有使用索引的查询

    • 5. 查询有多少慢查询记录

    • 分析工具

    前言:

    mysql慢查询日志用来记录mysql在相应时间内超过阈值的语句。 阈值定义在long_query_time里。

    <pre language="javascript" code_block="true">mysql> show variables like '%long_query_time%';
    +-----------------+-----------+
    | Variable_name | Value |
    +-----------------+-----------+
    | long_query_time | 10.000000 |
    +-----------------+-----------+
    1 row in set (0.00 sec)
    1234567</pre>

    从上面的查询出来的结果可以看到,long_query_time的默认值为10,意思是运行10S以上的语句定义为慢查询语句。当然这个数字你可以进行修改,今天我们就来聊聊在做mysql调优时,必会的那些慢查询语句。

    开启并设置慢查询语句的时间

    1. 查看是否开启慢查询语句

    image

    2. 开启慢查询

    <pre language="javascript" code_block="true">mysql> set global slow_query_log=1;
    Query OK, 0 rows affected (0.00 sec)

    mysql> show variables like '%slow_query_log%';
    +---------------------+---------------------------------+
    | Variable_name | Value |
    +---------------------+---------------------------------+
    | slow_query_log | ON |
    | slow_query_log_file | /var/run/mysqld/mysqld-slow.log |
    +---------------------+---------------------------------+
    2 rows in set (0.00 sec)

    zmgaosh 致码高胜寒

    1234567891011121314</pre>

    3. 修改满查询定义的时间

    方法一: 在数据库里设置

    <pre language="javascript" code_block="true">mysql> set global long_query_time=4;
    Query OK, 0 rows affected (0.00 sec)

    mysql> show variables like '%long_query_time%';
    +-----------------+----------+
    | Variable_name | Value |
    +-----------------+----------+
    | long_query_time | 4.000000 |
    +-----------------+----------+
    1 row in set (0.00 sec)
    致码高胜寒提示: 这里设置完有时候不生效,需要退出并重新连接数据库即可。
    zmgaosh
    123456789101112</pre>

    方法二: 在配置文件里设置

    <pre language="javascript" code_block="true">在[my.ini]中添加如下信息:

    [mysqld]

    log-slow-queries=" /var/run/mysqld/mysqld-slow.log" ## mysql慢查询日志目录

    long_query_time = 4 ## 最长执行时间(超过这个时间就背记录到慢查询日志里)

    log-queries-not-using-indexes ## 没有使用索引的查询也被记录在日志里
    123456789</pre>

    4. 开启 记录没有使用索引的查询

    image

    设置开启:

    <pre language="javascript" code_block="true">mysql> set global log_queries_not_using_indexes=1;
    Query OK, 0 rows affected (0.00 sec)

    mysql> show variables like 'log_queries_not_using_indexes';
    +-------------------------------+-------+
    | Variable_name | Value |
    +-------------------------------+-------+
    | log_queries_not_using_indexes | ON |
    +-------------------------------+-------+
    1 row in set (0.00 sec)
    zmgaosh
    1234567891011</pre>

    5. 查询有多少慢查询记录

    <pre language="javascript" code_block="true">mysql> show global status like '%Slow-queries%';
    Empty set (0.00 sec)
    12</pre>

    分析工具

    1. mysqldumpslow
    2. show processlist
    3. explain
    4. 使用zabbix监控获取数据的IO,cpu,连接数信息(准确度不高)

    在这里前三个工具经常使用,最后一个用的比较少,因为可靠度不够。

    相关文章

      网友评论

        本文标题:【mysql】mysql调优时必须掌握的慢查询语句排查命令

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