Mysql使用SHOW PROFILE剖析单条查询的性能

一、相关的指令

#默认 show profile 是关闭的,开启分析
SET PROFILING = 1;
#查看profiles,找到相关的sql对应id
show profiles;

#查看单条记录的详细 query id;
show profile for query 29;

#产看对CPU,IO等信息
show profile cpu for query 29;

##对每一个子任务的花费时间进行已统计排序
SELECT state, SUM(duration) AS Total_R,
ROUND(100 * SUM(duration) / (SELECT SUM(duration) FROM information_schema.profiling WHERE query_id = 29), 2) AS Pct_R,
COUNT() as Calls, SUM(duration) /COUNT() AS “R/Call”
FROM information_schema.profiling
WHERE query_id = 29 GROUP BY state ORDER BY total_r DESC;

二、数据项分析

Mysql使用SHOW PROFILE剖析单条查询的性能
比较重要的耗时选项和需要优化点:
Creating sort index:当前的SELECT中需要用到临时表在进行ORDER BY排序。建议:创建适当的索引
Sending data:发送数据
table lock:表锁。
System lock:系统锁。建议确认是由于哪个锁引起的,通常是因为MySQL或InnoDB内核级的锁引起的
Sorting result:结果的排序
copying to tmp table:将数据复制到临时表
Creating tmp table:创建临时表