当前位置 主页 > 服务器问题 > Linux/apache问题 >

    mysql慢查询操作实例分析【开启、测试、确认等】

    栏目:Linux/apache问题 时间:2019-12-19 22:20

    本文实例讲述了mysql慢查询操作。分享给大家供大家参考,具体如下:

    mysql有些sql会执行很慢,有可能造成服务器负载飙升

    首先查询 确定影响负载的是mysql ,使用top命令,ps命令等

    其次,进入MySQL,使用show full processlist查询执行中的sql语句,看看问题,使用explain 命令 查看状态

    最后找出sql语句杀死或者优化

    centos7上面安装mariadb服务

    yum -y install mariadb-server mariadb-devel
    
    

    开启慢查询

    more /etc/my.cnf.d/server.cnf
    [mariadb]
    slow_query_log=ON
    slow_query_log_file=/usr/local/mysql/data/slow.log
    long_query_time=1
    
    

    启动mariadb服务

    systemctl start mariadb
    
    

    查询mysql的慢查询是否开启,以及多久的时间以上是慢查询

    MariaDB [(none)]> show variables like '%slow_query%';
    +---------------------+--------------------------------+
    | Variable_name    | Value             |
    +---------------------+--------------------------------+
    | slow_query_log   | ON               |
    | slow_query_log_file | /usr/local/mysql/data/slow.log |
    +---------------------+--------------------------------+
    2 rows in set (0.00 sec)
    
    MariaDB [(none)]> show variables like 'long_query_time';
    +-----------------+----------+
    | Variable_name  | Value  |
    +-----------------+----------+
    | long_query_time | 1.000000 |
    +-----------------+----------+
    1 row in set (0.00 sec)
    
    
    #如果没用开启慢查询,可以在命令行开启
    mysql> set global slow_query_log=1;
    Query OK, 0 rows affected (0.00 sec)
    
    

     测试慢查询,以及查看日志

    MariaDB [(none)]> select sleep(2);
    +----------+
    | sleep(2) |
    +----------+
    |    0 |
    +----------+
    1 row in set (2.00 sec)
    
    
    [root@localhost ~]# more /usr/local/mysql/data/slow.log
    /usr/libexec/mysqld, Version: 5.5.60-MariaDB (MariaDB Server). started with:
    Tcp port: 0 Unix socket: /var/lib/mysql/mysql.sock
    Time         Id Command  Argument
    # Time: 180930 23:51:07
    # User@Host: root[root] @ localhost []
    # Thread_id: 2 Schema:  QC_hit: No
    # Query_time: 2.001017 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
    SET timestamp=1538322667;
    select sleep(2);
    
    

     确认慢查询

    MariaDB [(none)]> show full processlist; #查看state慢查询在进行
    +----+------+-----------+------+---------+------+------------+-----------------------+----------+
    | Id | User | Host   | db  | Command | Time | State   | Info         | Progress |
    +----+------+-----------+------+---------+------+------------+-----------------------+----------+
    | 3 | root | localhost | NULL | Query  |  9 | User sleep | select sleep(10)   |  0.000 |
    | 4 | root | localhost | NULL | Query  |  0 | NULL    | show full processlist |  0.000 |
    +----+------+-----------+------+---------+------+------------+-----------------------+----------+
    2 rows in set (0.00 sec)
    
    MariaDB [(none)]> show full processlist; #查看state慢查询已经结束,但是用户登陆了
    +----+------+-----------+------+---------+------+-------+-----------------------+----------+
    | Id | User | Host   | db  | Command | Time | State | Info         | Progress |
    +----+------+-----------+------+---------+------+-------+-----------------------+----------+
    | 3 | root | localhost | NULL | Sleep  |  1 |    | NULL         |  0.000 |
    | 4 | root | localhost | NULL | Query  |  0 | NULL | show full processlist |  0.000 |
    +----+------+-----------+------+---------+------+-------+-----------------------+----------+
    2 rows in set (0.00 sec)