Mysql优化--Show Profile
===============
是Mysql提供可以用来分析当前会话中语句执行的资源消耗情况。可以用于Sql的调优的测量。默认情况下处于关闭状态,并保存最近 15 次的运行结果。
查看功能是否开启:
SHOW VARIABLES LIKE '%profiling%'
如果关闭,则需要开启:
SET profiling = on;
1 准备数据
1.1 建表、函数、存储过程
执行 这篇(调用函数和存储过程批量插入数据) 文章的第 1-7 步,注意,不要执行第8步
1.2 插入数据
现在执行第8步
CALL insert_employee(100000000, 500000);
机器慢,跑的时候有点长;正好,用它来看看慢查询日志,也还是不错的,结果如下:
2 运行Sql
2.1 确保已开启 ShowProfile
SHOW VARIABLES LIKE '%profiling%'
2.2 执行Sql
SELECT * FROM employee e GROUP BY e.id%10;
Sql执行结果:
用 ShowProfile 查看一下:
SHOW PROFILES;
结果:
多执行几次Sql后再看效果:
3 ShowProfile分析
3.1 ShowProfile
用 ShowProfile 查看一下 SELECT * FROM employee e GROUP BY e.id%10 这条Sql的执行情况:
SHOW PROFILE cpu, block io FOR QUERY 3;
结果如下:
可以看到,创建临时表、拷贝数据、删除临时表均出现在了Sql生命周期内,且 Sending Data 就花费了 0.276851秒,这也是整个过程中耗时最长的部分。
3.2 日常开发中需要注意的地方
以下这些情况都很危险,如果出现,就一定需要注意了。
-
converting HEAP to MyISAM 查询结果太大,内存都不够用了,往磁盘上搬了
-
creating tmp talbe 创建临时表(拷贝数据到临时表,用完后删除)
-
copying to tmp table on disk 把内存中临时表复制到磁盘,危险
-
locked