https://dev.mysql.com/doc/
如果英文不好的话,可以参考 searchdoc 翻译的中文版本
http://www.searchdoc.cn/rdbms/mysql/dev.mysql.com/doc/refman/5.7/en/index.com.coder114.cn.html
默认关闭
mysql> show variables like 'slow_query_log';
+----------------+-------+
| Variable_name | Value |
+----------------+-------+
| slow_query_log | OFF |
+----------------+-------+
1 row in set (0.00 sec)
mysql>
因为记录慢查询比较占用磁盘空间,可以通过脚本关闭慢查询,比如一个小时以后关闭慢查询等等。
开启的话,可以通过 set global 来动态修改。
mysql> set global slow_query_log=on; # 开启慢查询
Query OK, 0 rows affected (0.04 sec)
mysql> show variables like 'slow_query_log';
+----------------+-------+
| Variable_name | Value |
+----------------+-------+
| slow_query_log | ON |
+----------------+-------+
1 row in set (0.01 sec)
mysql>
默认存储在MySQL的数据目录中,建议日志文件和数据文件分开存储。
mysql> show variables like 'slow_query_log_file';
+---------------------+---------------------------------+
| Variable_name | Value |
+---------------------+---------------------------------+
| slow_query_log_file | /var/lib/mysql/artisan-slow.log |
+---------------------+---------------------------------+
1 row in set (0.01 sec)
单位为秒 。 默认10秒。
mysql> show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.02 sec)
mysql> show variables like 'log_queries_not_using_indexes';
+-------------------------------+-------+
| Variable_name | Value |
+-------------------------------+-------+
| log_queries_not_using_indexes | OFF |
+-------------------------------+-------+
1 row in set (0.00 sec)
mysql>
慢日志涨这个样子:
如何分析呢? 因为慢查询日志比较大,靠肉眼很难分析,所以需要依赖第三方工具
mysqldumpslow可以汇总除查询条件外其他完全相同的SQL,并将分析结果按照参数中所指定的顺序输出。
用法 :
mysqldumpslow -s r -t 10 slow-mysql.log
参数说明:
-s order (c , t , l ,r , at ,al ,ar) 指定按照那种排序方式输出结果
c: 总次数
t: 总时间
l: 锁的时间
r:种数据行
at 、 al、ar : t l r 平均数, 比如 at = 总时间/总次数
-t top 指定取前几条作为结果输出。
第三方的工具,
用法如下:
pt-query-digest \
--explain h=ip.1,u=用户,p=密码\
slow-mysql.log
这个工具生成的慢查询分析日志 更详细。 建议用这个
主从架构下, 建议在从节点执行 。
SELECT
id,
`USER`,
`HOST`,
db,
COMMAND,
TIME,
state,
INFO
FROM
information_schema.`PROCESSLIST` a
WHERE
a.TIME > 60