[聚合文章] MySQL调优三部曲(一)慢查询

MySQL 1900-01-01 13 阅读
slow_query_log: 慢查询开启状态(on/off)
  • slow_query_log_file: 慢查询日志存放位置(该目录需要MySQL的运行账号可写权限,一般设置为MySQL的数据存放目录)
  • long_query_time: 查询超过多少秒才记录
  • 设置步骤

    1. 查看慢查询相关参数

    mysql> show variables like 'slow_query%';+---------------------+--------------------------------------+| Variable_name       | Value                                |+---------------------+--------------------------------------+| slow_query_log      | OFF                                  || slow_query_log_file | /var/lib/mysql/9e598ca46b66-slow.log |+---------------------+--------------------------------------+2 rows in set (0.00 sec)mysql> show variables like 'long_query_time';+-----------------+-----------+| Variable_name   | Value     |+-----------------+-----------+| long_query_time | 10.000000 |+-----------------+-----------+1 row in set (0.00 sec)

    2. 设置

    • 全局变量设置

    开启慢查询

    mysql> set global slow_query_log='ON'; 

    设置慢查询日志存放位置

    mysql> set global slow_query_log_file='/var/lib/mysql/slow.log';

    设置超时时间

    mysql> set global long_query_time=2;

    ps1: 使用命令 set global long_query_time=2修改后,需要重新连接或新开一个会话才能看到修改值

    ps2: 不知道为啥,我用全局设置的方法总是写不了慢查询日志,重启也不行

    • 配置文件设置

    修改配置文件my.cnf,在[mysqld]下添加

    [mysqld]slow_query_log = ONslow_query_log_file = /var/lib/mysql/slow.loglong_query_time = 2

    重启MySQL服务

    service mysqld restart

    慢查询分析

    mysqldumpslow -s [Parameter] -t [Parameter] /var/lib/mysql/slow.log
    参数

    -s : 排序方式

    • c:query执行的次数
    • t:sql执行的时间
    • l:lock锁表的时间
    • r:sql返回的行数

    -t: top,返回前n条数据

    -g: 正则匹配,大小写不敏感

    返回执行时间最长的前两个query

    mysqldumpslow -s t -t 2 /var/lib/mysql/slow.log

    显示执行次数最多的前两个query

    mysqldumpslow -s c -t 2 /var/lib/mysql/slow.log

    返回按照时间排序的前10条里面含有左连接的查询语句

    mysqldumpslow -s t -t 10 -g "left join" /database/mysql/slow-log

    注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。