mysql语句性能分析工具之profiling用法
以往我们已经介绍了一个mysql的分析工具:mysql慢查询日志分析工具(pt-query-digest),可以看我的文章:mysql慢查询日志分析工具(pt-query-digest)
一、profiling的介绍
sql查询慢的情况很常见,对于慢sql的优化有三个步骤,又称优化三板斧。
- 板斧一:查看执行计划explain
- 板斧二:建立合适索引
- 板斧三:使用合适的连接关系和过滤条件来实现sql语句的优化
如果执行计划正确sql语句的性能还很慢,可以通过mysql的profiling工具进行定位分析。
为了更精准的定位一条sql语句的性能问题,需要清楚的直到这条sql语句运行时消耗多少系统资源。
mysql中profiling工具可以满足此需求,通过该工具可以获取一条sql语句在执行过程中多种资源的消耗情况——比如cpu,io,ipc,swap等资源消耗情况。
二、profiling使用方法
2.1、启用命令
set profiling = 1;
2.2、启动命令后,运行想要查询性能的sql语句
select * from xiatui where name like '0%' and age = '9803' and sex =0;
2.3、查询上述sql语句信息
show profiles;
说明:
- Query_ID:sql语句的id编号,这个编号会在步骤4、5用到
- Duration:sql语句执行时长
- Query:具体的sql语句
2.4、查询资源消耗情况
SHOW PROFILE CPU, BLOCK IO FOR QUERY 360;
上述360就是第三步骤的Query_ID值,想要查询哪条sql语句,就输入哪条sql语句对应的id值。
2.5、查询某条sql语句的具体执行时间
SHOW PROFILE FOR QUERY 391;
优化建议:
如果想要优化某条sql语句,可以关注一下该条sql语句的show profile结果中每个阶段的耗时,分析耗时最长的阶段。
如果status列出现下面的信息就可以考虑对sql语句进行优化:
- converting heap to MyISAM:查询结果太大,内存不够用
- creating tmp table:创建了临时表。先拷贝数据到临时表,用完后再删除临时表。
- copying to tmp table on disk:把内存中临时表复制到磁盘上
- locked:发生了死锁行为。
2.6、关闭
set profiling = 0;
三、整体使用过程
set profiling = 1; select /*+ no_icp(xiatui) */ * from xiatui where name like '0%' and age = '9803' and sex =0; select * from xiatui where name like '0%' and age = '9803' and sex =0; show profiles; set profiling = 0;
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
最新评论