默认关闭,除非需要查看慢sql日志,平时不要打开
以下设置都是临时有效,重启数据库后会失效,想要永久生效需要修改配置文件进行配置

参数说明

  • slow_query_log 慢查询开启状态
  • slow_query_log_file 慢查询日志存放的位置(这个目录需要MySQL的运行帐号的可写权限,一般设置为MySQL的数据存放目录)
  • long_query_time 查询超过多少秒才记录

查看慢查询日志状态及存储路径:

SHOW VARIABLES LIKE 'slow_query_log%';
SHOW VARIABLES LIKE 'long_query_time'; -- 查看慢查询超时时间

结果:

slow_query_log           ON
slow_query_log_file	/var/lib/mysql/88eec0ff40aa-slow.log
long_query_time	        10.000000

设置方法

方法1:全局变量设置(临时)

打开慢查询日志:

SET GLOBAL slow_query_log=1

设置慢查询日志超时时间:

SET GLOBAL long_query_time=3    # 设置为3秒,需要重新连接或打开一个新的会话,才能查看新设置的超时时间
方法2:配置文件设置

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

[mysqld]
slow_query_log = ON
slow_query_log_file = /usr/local/mysql/data/slow.log
long_query_time = 1

重启MySQL服务

测试

模拟一个慢查询sql,方便测试:

SELECT sleep(4);

查看有几条慢sql:

SHOW GLOBAL STATUS LIKE '%slow_queries%'

服务器上查询生成的慢查询日志

ls /usr/local/mysql/data/slow.log

慢sql日志分析工具mysqldumpslow

mysqldumpslow工具是mysql自带的,不需要安装
慢查询日志在/var/lib/mysql/目录下,文件名xxxxxx-slow.log

mysqldumpslow -t 10 /var/lib/mysql/xxxxxx-slow.log        --查前十行

可以查询如下信息:

  • s:表示何种方式排序
  • c:访问次数
  • l:锁定时间
  • r:返回记录数
  • t:查询时间
  • al:平均锁定时间
  • ar:平均返回记录数
  • at:平均查询时间
  • t:返回前面多少条数据
  • g:后面搭配一个正则匹配模式,大小写不敏感

案例

mysqldumpslow -s c -t 10 /var/run/mysqld/5001144eef26-slow.log # 取出使用最多的10条慢查询

mysqldumpslow -s t -t 3 /var/run/mysqld/mysqld-slow.log # 取出查询时间最慢的3条慢查询

mysqldumpslow -s t -t 10 -g “left join” /database/mysql/slow-log # 得到按照时间排序的前10条里面含有左连接的查询语句

mysqldumpslow -s r -t 10 -g 'left join' /var/run/mysqld/mysqld-slow.log # 按照扫描行数最多的

慢日志查询分析工具:pt-query-digest

安装:wget https://www.percona.com/downloads/percona-toolkit/2.2.16/RPM/percona-toolkit-2.2.16-1.noarch.rpm && yum localinstall -y percona-toolkit-2.2.16-1.noarch.rpm
命令:
查看服务器信息
pt-summary

查看磁盘开销使用信息
pt-diskstats

查看mysql数据库信息
pt-mysql-summary --user=root -password=123456

分析慢查询日志
pt-query-digest /data/mysql/data/db-3-12-slow.log

查询mysql从库和同步状态
pt-slave-find --host=localhost --user=root --password=123456

查看mysql死锁信息
pt-deadlock-logger --user=root --password=123456 localhost

从慢查询日志中分析索引使用情况
pt-index-usage slow_20131009.log

查找数据库表中重复的索引
pt-duplicate-key-checker --host=localhost --user=root --password=123456

查看mysql表和文件的当前IO开销:
pt-ioprofile

查找数据库里大于2G的表:
pt-find --user=root --password=123456 --tablesize +2G

查看表和索引大小并排序:
pt-find --user=root --password=123456 --printf "%T\t%D.%N\n" | sort -rn

显示查询时间大于60秒的查询:
pt-kill --user=root --password=123456 --busy-time 60 --print

kill掉大于60秒的查询
pt-kill --user=root --password=123456 --busy-time 60 --kill