美文网首页MySQL
MySQL慢查询

MySQL慢查询

作者: 雁宇 | 来源:发表于2017-07-22 11:47 被阅读35次

    定义

    分析MySQL语句查询性能的方法除了使用 EXPLAIN 输出执行计划,还可以让MySQL记录下查询超过指定时间的语句,我们将超过指定时间的SQL语句查询称为“慢查询”。过多的慢查询会导致数据库崩溃。(来自百度百科 - 慢查询

    在MySQL5.7中启用慢查询

    1. 登录本地mysql:
    mysql -u root -p123456
    
    1. 查看系统变量的状态:
    show variables like '%query%';
    

    可以看到几条关键的数据:

    | long_query_time | 10.000000
    | slow_query_log | OFF
    | slow_query_log_file | /usr/local/mysql/data/duanyanlongdeMacBook-Pro-slow.log

    1. 启用慢查询日志记录,并修改默认的慢查询时间:
    set global slow_query_log = ON;
    set global long_query_time = 2;
    

    修改后再次查询系统变量的状态,发现long_query_time的值并没有改变,这是因为直接修改global 的long_query_time 之后在当前的的窗口中是没有效果的,在新打开的窗口中才会有效果。如果想让本窗口也有效果 的话,不用加 global关键字。(参照:set global long_query_time对当前窗口无效80@365

    1. 重新打开MySQL窗口,查看系统变量的状态:

    | long_query_time | 2.000000
    | slow_query_log | ON
    | slow_query_log_file | /usr/local/mysql/data/duanyanlongdeMacBook-Pro-slow.log

    1. 模拟执行慢查询:
    SELECT SLEEP(5);
    
    1. 查看慢查询的日志记录:
    sudo cat /usr/local/mysql/data/duanyanlongdeMacBook-Pro-slow.log
    

    可以看到刚刚被执行的慢查询已经被记录了下来:

    /usr/local/mysql/bin/mysqld, Version: 5.7.18 (MySQL Community Server (GPL)). started with:
    Tcp port: 3306 Unix socket: /tmp/mysql.sock
    Time Id Command Argument

    # Time: 2017-07-17T12:49:08.093455Z
    # User@Host: root[root] @ localhost [] Id: 5
    # Query_time: 5.006725 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
    SET timestamp=1500295748;
    SELECT SLEEP(5);

    相关文章

      网友评论

        本文标题:MySQL慢查询

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