mysql语句性能分析工具——profiling

以往我们已经介绍了一个mysql的分析工具:mysql慢查询日志分析工具(pt-query-digest),可以看我的文章:mysql慢查询日志分析工具(pt-query-digest)-CSDN博客

一、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;

mysql语句性能分析工具——profiling_第1张图片 说明:

        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值。

mysql语句性能分析工具——profiling_第2张图片

 2.5、查询某条sql语句的具体执行时间

SHOW PROFILE FOR QUERY 391;

mysql语句性能分析工具——profiling_第3张图片 

优化建议:如果想要优化某条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;

你可能感兴趣的:(mysql,数据库,sql,sql分析工具,性能分析)