Mysql性能诊断利器---profile

29 篇文章 0 订阅
27 篇文章 0 订阅

   大家平时做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;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值