mysql之profile分析(简单篇)

    最近项目上要求弄一下压测,看下各个服务的瓶颈,然后进行上线前的最后冲刺,于是又拿起了2年前看的mysql优化一书,挑灯夜战,写ppt的同时想着顺道写篇博客~~ 官网资料

profile开关

profile开关默认是关闭的,所以倒腾profile之前,先得查看profile是否打开。

  1. 查看profile是否打开
SELECT @@profiling //0关闭,1打开
或者 
SHOW VARIABLES LIKE 'profiling'; //OFF关闭,1打开

若查询出结果为0,则需要手动打开
show variables结果图

  1. 打开profile
SET @@profiling = 1
或者
SET profiling=ON;

分析之路

  • 首先使用show profiles查出最近15条SQL语句的运行状态;
  • 其次对运行慢的sql,使用show profile for query 进行单独解析;

show profiles

show profiles;

显示最近的15条sql执行语句,可以看到:

Query_IDDurationQuery
10.006select * from table1
22.809select t1.id, t2.id from table1 t1 left join table2 on table2.uid = ti.id

SHOW PROFILE FOR QUERY id

执行语句说明

SHOW PROFILE … FOR QUERY id 可指定资源类型查询

资源类型说明
all所有的开销信息
block io块IO相关开销
context swtichs上下文切换相关开销
cpucpu 相关开销
ipc发送和接收相关开销
memory内存相关开销
page faults页面错误相关开销信息
source和Source_function ,Source_file,Source_line 相关的开销信息
swaps交换次数相关的开销信息

执行结果说明

参数名称说明
Statussql 语句执行的状态
Durationsql 执行过程中每一个步骤的耗时
CPU_user当前用户占有的cpu
CPU_system系统占有的cpu
Block_ops_inI/O 输入
Block_ops_outI/O 输出
SHOW PROFILE FOR QUERY 1 

执行后结果类似如下表,可以看到执行过程中的每个步骤和所消耗时间。

StatusDuration
starting0.000272
Executing hook on transaction0.000012
executing2.667285
query end0.000012
cleaning up0.000034

需优化的4种情况

若执行show profile for query id出现如下4种情况,则需要对sql进行优化!

  • converting HEAP to MyISAM
    • 查询结果过大,需将结果从内存搬到磁盘
  • creating tmp table
    • 拷贝数据到临时表
    • 用完再删除
  • copying to tmp table on disk
    • 内存中临时表转移到磁盘
  • locked
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值