profile
通过上节课的知识我们可以定位出例如哪条查询语句的执行时间超过2秒,即认定该查询语句是慢查询。此时有一个问题,当某条查询语句是1.9秒, 它可以是慢查询语句,但是它不超过2秒就不会被慢查询日志记录,我们就定位不到该1.9秒的查询语句,怎么办呢,就需要使用到这节课的profile操作
show profiles能够在做SQL优化时,帮助我们了解时间都耗费到哪里去了。通过have_profiling参数,能够看到当前MySQL是否支持profile操作:
select @@have_profiling; #YES表示支持
虽然当前数据库支持profile操作,但是profile默认是关闭的,可以通过set语句在session/global级别开启profiling:
set profiling = 1;
然后就可以进行profile操作了。profile能够在我们执行SQL时,通过如下指令查看SQL的执行耗时(在命令行操作显示的才正常,可用linux终端或xshell):
1、查看每一条SQL的耗时基本情况。可以定位出哪条语句耗时多
show profiles;
2、查看指定query_id的SQL语句各个阶段的耗时情况。可以查出某条(查哪条就输入哪条的query_id)耗时多的语句耗时在哪些地方
show profile for query query_id;#每条语句都有自己的query_id,输入该语句的query_id值(数字)即可
3、查看指定query_id的SQL语句CPU的使用情况
show profile cpu for query query_id;
如果在dategrip上执行show profiles指令,会多出来很多莫名其妙的数据,建议用linux终端或xshell,是在不行就用windows的cmd命令行
上面第2点的查询某条语句耗时的具体地方,也就是某条语句从开始到结束执行的全过程耗时,过程包括如下
1、staring...开始执行
2、checkong...检查权限
3、Opening...打开对应的表
4、init进行初始化操作
5、optimizing进行优化操作
6、statistios进行统计操作
7、executing进行执行的操作
8、end进行执行完毕的操作
9、waiting进行提交操作
10、closing...关闭对应的表