Mysql性能诊断利器---profile
2017-05-30 10:26
267 查看
大家平时做mysql运维时,会碰到很多很诡异的问题,我就碰到过,一个按照主键查询sql平时只要几毫秒就出结果,但是突然响应时间就变成3秒多,看执行计划都是正常,执行时间就不正常,检查服务器的IO,cpu没有异常,怀疑可能是网络延迟导致的,测试网络延时不到1ms,这个时候就非常郁闷,很想知道时间都耗在那里,MySQL中可以使用profile去查看SQL的执行时间主要消耗在哪里,下面看看profile的使用。
mysql的profile开始是session级别的,影响范围是可控的,可以使用以下命令查看是否开启profile,如果是以下结果,则没有开启
mysql> show profiles;
Empty set, 1 warning (0.01 sec)
使用以下方法进行开启
mysql> set profiling=1;
Query OK, 0 rows affected, 1 warning (0.02 sec)
如果想了解更多的用法,可以看mysql的帮助信息
mysql> ? show profiles;
下面就可以正常使用profile,开启之后,profile会自动收集所有当前session执行的语句
mysql> show profiles;
+----------+------------+-------------------------+
| Query_ID | Duration | Query |
+----------+------------+-------------------------+
| 1 | 0.01757800 | show databases |
| 2 | 0.02815125 | SELECT DATABASE() |
| 3 | 0.00048825 | show databases |
| 4 | 0.04561550 | show tables |
| 5 | 0.00050200 | show tables |
| 6 | 0.03086925 | select count(*) from t1 |
| 7 | 0.06646750 | help 'show profiles' |
| 8 | 0.00770600 | help 'show profile' |
+----------+------------+-------------------------+
8 rows in set, 1 warning (0.00 sec)
举个例子,加入想看select count(*) from t1这个语句时间都耗在那里,可以用以下命令
上图中,可以很清楚的看到执行上述sql时间都耗在什么操作上,有很多时候,table_open_cache设置不合理,并发高之后,就会导致性能直线下降,使用这个方法很直观的就能看出时间损耗在opening tables上,就可以针对table_open_cache这个参数进行调优了。
当然profile可以同时查看CPU,BLOCK IO,SWAPS等信息
当然也有更偷懒的方法,查看所有性能数据
show profile all for query 6;
mysql的profile开始是session级别的,影响范围是可控的,可以使用以下命令查看是否开启profile,如果是以下结果,则没有开启
mysql> show profiles;
Empty set, 1 warning (0.01 sec)
使用以下方法进行开启
mysql> set profiling=1;
Query OK, 0 rows affected, 1 warning (0.02 sec)
如果想了解更多的用法,可以看mysql的帮助信息
mysql> ? show profiles;
下面就可以正常使用profile,开启之后,profile会自动收集所有当前session执行的语句
mysql> show profiles;
+----------+------------+-------------------------+
| Query_ID | Duration | Query |
+----------+------------+-------------------------+
| 1 | 0.01757800 | show databases |
| 2 | 0.02815125 | SELECT DATABASE() |
| 3 | 0.00048825 | show databases |
| 4 | 0.04561550 | show tables |
| 5 | 0.00050200 | show tables |
| 6 | 0.03086925 | select count(*) from t1 |
| 7 | 0.06646750 | help 'show profiles' |
| 8 | 0.00770600 | help 'show profile' |
+----------+------------+-------------------------+
8 rows in set, 1 warning (0.00 sec)
举个例子,加入想看select count(*) from t1这个语句时间都耗在那里,可以用以下命令
上图中,可以很清楚的看到执行上述sql时间都耗在什么操作上,有很多时候,table_open_cache设置不合理,并发高之后,就会导致性能直线下降,使用这个方法很直观的就能看出时间损耗在opening tables上,就可以针对table_open_cache这个参数进行调优了。
当然profile可以同时查看CPU,BLOCK IO,SWAPS等信息
当然也有更偷懒的方法,查看所有性能数据
show profile all for query 6;
相关文章推荐
- Mysql性能诊断利器---profile
- MySQL中使用explain和profile分析SQL执行计划和性能
- MySQL性能分析工具profile使用教程
- MySql性能分析工具之Show Profile
- MySQL性能诊断实践之系统观测工具
- 飘逸的python - 性能调优利器profile及其意义
- Mysql性能和Linux性能监控利器----orzdba
- btrace拓展工具-java应用性能诊断优化利器
- MySQL性能分析工具profile的使用(1)
- MySQL 的实时性能监控利器
- profile MySQL性能分析工具
- mysql使用profile分析语句性能消耗
- MySQL性能诊断与调优 转
- mysql 性能诊断
- mysql性能调试工具profile
- MySQL使用profile查询性能的操作教程
- 使用mysql profile精确找到sql性能缺陷
- php代码性能profile利器xhprof工作原理浅析
- [置顶] 【Mycat】数据库性能提升利器(三)——Mycat实现Mysql主从复制和读写分离
- mysql性能优化-慢查询分析、优化索引和配置 (慢查询日志,explain,profile)