打开慢日志开关

因为开启慢查询日志是有代价的(跟 bin log、optimizer-trace 一样),所以它默认是关闭的:

show variables like 'slow_query%';

MySQL如何查询正在执行的查询语句_android

除了这个开关,还有一个参数,控制执行超过多长时间的 SQL 才记录到慢日志,默认是 10 秒。

除了这个开关,还有一个参数,控制执行超过多长时间的 SQL 才记录到慢日志,默认是 10 秒。

show variables like '%long_query%';


可以直接动态修改参数(重启后失效)。


set @@global.slow_query_log=1; -- 1 开启,0 关闭,重启后失效 
set @@global.long_query_time=3; -- mysql 默认的慢查询时间是 10 秒,另开一个窗口后才会查到最新值 

show variables like '%long_query%'; 
show variables like '%slow_query%';


或者修改配置文件 my.cnf。


以下配置定义了慢查询日志的开关、慢查询的时间、日志文件的存放路径。


slow_query_log = ON 
long_query_time=2 
slow_query_log_file =/var/lib/mysql/localhost-slow.log


模拟慢查询:


select sleep(10);


查询 user_innodb 表的 500 万数据(检查是不是没有索引)。


SELECT * FROM `user_innodb` where phone = '136';

慢日志分析

1、日志内容

show global status like 'slow_queries'; -- 查看有多少慢查询 
show variables like '%slow_query%'; -- 获取慢日志目录


cat /var/lib/mysql/ localhost-slow.log

MySQL如何查询正在执行的查询语句_android_02

有了慢查询日志,怎么去分析统计呢?比如 SQL 语句的出现的慢查询次数最多,平均每次执行了多久?人工肉眼分析显然不可能。

2、mysqldumpslow

MySQL 提供了 mysqldumpslow 的工具,在 MySQL 的 bin 目录下。

mysqldumpslow --help

例如:查询用时最多的 10 条慢 SQL:

mysqldumpslow -s t -t 10 -g 'select' /var/lib/mysql/localhost-slow.log

MySQL如何查询正在执行的查询语句_后端_03

Count 代表这个 SQL 执行了多少次;

Time 代表执行的时间,括号里面是累计时间;

Lock 表示锁定的时间,括号是累计;

Rows 表示返回的记录数,括号是累计。

除了慢查询日志之外,还有一个 SHOW PROFILE 工具可以使用

先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦