mysql的profile_mysql中的profile

之前做sql优化,测量一个sql的效率最常用的就是看查询条数和执行时间,然后在explain的,可是用久了也会发现explain的也不一定详细,于是又发现了profile这个好东西。

profile的语法为

SHOW PROFILE [type [, type] ... ] [FOR QUERY n] [LIMIT row_count [OFFSET offset]] type:

ALL | BLOCK IO | CONTEXT SWITCHES | CPU | IPC | MEMORY | PAGE FAULTS | SOURCE | SWAPS

其中的一些参数如下:

* ALL - displays all information

* BLOCK IO - displays counts for block input and output Operations

* CONTEXT SWITCHES - displays counts for voluntary and involuntary context switches

* ipC - displays counts for messages sent and received

* MEMORY - is not currently implemented

* PAGE FAULTS - displays counts for major and minor page faults

* SOURCE - displays the names of functions from the source code, together with the name and line number of the file in which the function occurs

* SWAPS - displays swap counts

一下是profile的使用方法,首先看你的mysql有木有开profile

SELECT @@PROFILing

如果是1,说明这个参数已经打开了,如果为0,用下面的语句打开就可以了

SET profiling = 1;

然后随便执行一个sql并show一下profiles,如下:

SELECT * FROM `employees`;

show PROFILES;

然后就会看到queryID,花费的时间及对应的查询

然后找到对应的queryID并用如下的语句

show PROFILE for query 151;

然后会显示如下的结果

e316ddc363a6f20e1c77d0b22f67b25b.png

可以用all来显示更多的有用信息

show PROFILE all for query 178;

69e718ba5a9af4b8217b1f06ecfde16b.png

profile能做什么?这里有一个博客就是用profile做的测试,结论是sql的前后加空格后,不会影响cache。sql中间加空格后会影响cache

查询必须是完全相同的(逐字节相同)才能够被认为是相同的。另外,同样的查询字符串由于其它原因可能认为是不同的。使用不同的数据库、不同的协议版本或者不同 默认字符集的查询被认为是不同的查询并且分别进行缓存。

这里有一篇explain,profile和慢日志一起讲的博客,分享一下

总结一下,profile是一个不错的分析sql的效率的工具。具体的语法就是show profile就可以了,可以看到执行每个sql的各个阶段的消耗。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值