mysql pt 慢日志_pt工具-mysql慢日志分析&优化

一、安装pt工具

二、慢查询日志整理

pt-query-digest --since '2017-09-20 00:00:00' --until '2017-09-21 00:00:00' mysql_slow_query.log > 920

三、在线执行DDL操作 不锁表

pt-online-schema-change --user=user --ask-pass --host=10.0.201.34\--alter "DROP KEY cid, ADD KEY idx_corpid_userid(f_corp_id,f_user_id)"\

D=confluence,t=sbtest3 --print --execute

四、慢查询分析过程

1、查看表结构、数据量和索引情况

show create table a;

select count(*) from a;

show index a;

2、查询trace_sn字段在表wt_abc_detail中数据的比例,选取最高的添加索引

select count(distinct id)/count(1) from a;

3、添加索引

alter table a add index idx_id(id)

4、explain查看执行计划

5、利用profile查看资源占用情况

#查看profiling 是否开启

show variables like'%prof%'#开启profile

set profiling=on;

#查找要分析的语句编号

show profiles;

#分析语句资源开销,可看到哪里执行时间最长

show profile cpu,block iofor query 28;

例:

12345101d02b6a1a1d1943c95d12abeb.png

cf4f3636288f7f80dc11350726e66f92.png

三、索引添加原则

3.1  不能使用索引的情况

LIKE:只有后边带%才会用索引,前边或者前后都带的索引不生效(LIKE '%275024%',此时不生效)

!=:无法使用索引

OR:需要给字段单独添加索引,否则不生效

索引列上有函数运算或隐式转换,导致不走索引;如SELECT * FROM T WHERE date_format(Y) = XXX ,这时会先遍历T表Y列转换时间格式,同理函数会先遍历运算,导致用不上索引; 可以为函数加函数索引。

有NULL值时使用count(*)

NOT IN 无法使用索引,最好改成IN

3.2  复合索引注意筛选最左列

引导列要选择过滤条件的列作为引导列,比如 where a.xxx='xxx' 或者 a.xxx> 或者 a.xxx

尽量把join列放到组合索引最后面

3.3  join

join要保证小表驱动大表原则,如果查询计划显示大表驱动小表,可通过添加索引等方式变更驱动顺序

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值