tcpdump&pt-query-digest分析mysql负载性能问题

原文地址:
[MySQL运维] 生产数据库性能优化真实案例
http://f.dataguru.cn/forum.php?mod=viewthread&action=printable&tid=361155

案例背景

线上某台mysql生产库服务器,CPU负载告警,使用率持续接近100%,丝毫没有回落的意思!

性能表象的数据采集

这里写图片描述

登陆DB服务器
mysql进程的CPU占用率765.9%(8核),CPU基本上消耗殆尽!
这里写图片描述

问题全面诊断

这里写图片描述

结论:
内存,磁盘都不是问题,中断请求数还算可以接受,CPU出现性能瓶颈,有大量任务等待CPU时间片;
基本上可以断定是单纯的CPU问题,且是由于mysql进程引发;
根据CPU负载模型,可以断定出问题的地方:(用户态的CPU使用率是瓶颈)
1. mysql进行大量的内存操作,逻辑读;例如:缺失关键索引
2. 大量的CPU运算任务;例如:2表的笛卡尔积

MySQL层性能采集

此处可以考虑使用慢日志,由于磁盘不是瓶颈,不会带来太大的额外负载;
这里我采用tcpdump和pt-query-digest来抓问题SQL;

监控:

tcpdump -i eth0 -s 65535 -x -nn -q -tttt port 3306 -c 200000 > 1.dmp &

分析

    pt-query-digest --type tcpdump 1.dmp --limit 10 > report.log 

这里写图片描述
基本上搞定TOP2SQL,问题就能得到缓解;
这2语句的执行时间基本是在1S的样子,且消耗了大量CPU时间:
这里写图片描述
这里写图片描述

SQL优化

TOP 1 SQL
这里写图片描述
同一个表访问了N次,且是select *,想必大家都知道怎么优化了吧!(吐槽一下!)

TOP 2 SQL
这里写图片描述
该语句基本上是全表扫描,优化的余地不多;select * 是一个,建一个复合索引,使用索引扫描替换全表扫描

解决办法

临时停止相应的业务,将优化方案提给开发部门!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值