开发者社区> 技术小阿哥> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

mysql 索引引发CPU负载飙升

简介:
+关注继续查看

[MySQL优化案例]系列 — 典型性索引引发CPU负载飙升问题


1.停掉慢查询

2.停掉无关的服务

3.停掉从库



1.在刚开始的时间,导出show full processlist;

mysql -uroot -p'xx' -Ne "show full processlist;" > /root/process.txt



2.pt-ioprofile --profile-pid=3946 --cell=sizes

2017年 09月 21日 星期四 15:23:38 CST

114688     114688          0          0          0          0          0          0          0 a表

53098      49152          0          0          0          0       3946          0          0 b表


3.比对这两者,注意pread和Sending data


明显是查询慢,以及并发查询导致,io升高


4.最后测试一下这台机器的io


 time dd if=/dev/sdb of=/testrw.dbf bs=4k


5.后期,数据库剥离,方便排错


6.set profiling=1;

show profile cpu,block io for query 1;


可能的原因

1.是经常执行的sql没有加索引,导致执行时间有时候非常长。导致cpu占有到700%

2.pt工具引起的,因为使用pt工具处理慢查询,如果pt和mysql运行同一个磁盘上,也可能产生io瓶颈


分析的过程

用show processlist 看进程是查询慢还是update慢

用show OPEN TABLES where In_use > 0; 查询锁表

最后用lepus查询下,以下sql语句有可能是错的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
AAAAA  BBBBB (为慢查询用到的库名)
select t2.checksum,t2.sample,t2.last_seen,t2.ts_cnt,
t2.Query_time_avg,t2.Query_time_max,t2.Query_time_sum,t2.Lock_time_max,t2.Lock_time_sum
from
(select a.checksum,a.fingerprint,a.sample,a.first_seen,a.last_seen,b.serverid_max,
b.db_max,b.user_max,b.ts_min,b.ts_max,
sum(b.ts_cnt) as ts_cnt,
sum(b.Query_time_sum)/sum(b.ts_cnt) as Query_time_avg, 
max(b.Query_time_max) as Query_time_max, 
min(b.Query_time_min) as Query_time_min,
b.Query_time_sum as Query_time_sum,
max(b.Lock_time_max) as Lock_time_max, 
min(b.Lock_time_min) as Lock_time_min,
sum(b.Lock_time_sum) as Lock_time_sum
from mysql_slow_query_review a join mysql_slow_query_review_history b 
where a.checksum=b.checksum and b.serverid_max='275' 
group by a.checksum ) t2 where 
-- t2.Query_time_avg>4 and t2.ts_cnt>1000
t2.sample like '%AAAAA%' and t2.sample like '%BBBBB%'
and t2.last_seen >  date_sub(now(),interval 2 week) and t2.sample like '%count(1)%'
order by t2.ts_cnt desc limit 1
 
-- order by Query_time_sum desc


wKioL1nErm_hZYF5AAAjwYkCteE104.png


或者


select * from mysql_slow_query_review_history

where sample like '%count(1)%'

and ts_max > '2017-09-21 00:00:00' and ts_max > '2017-09-21 15:00:00'

and db_max = 'db'


show processlist 里面组好能用explain 解析下,这是最靠谱的办法。


还有几个误区


1.Query_time: 4173.803182  Lock_time: 0.000081


2.show processlist 比 直接看binlog执行时间要差点



总结

query time 很严重,要特别注意

binlog执行时间

mysql优化无非是内存,cpu,io,目前看来cpu高,就是慢查询太多,好多sql未加索引



本文转自 liqius 51CTO博客,原文链接:http://blog.51cto.com/szgb17/1967526,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【Linux】【MySQL】CentOS7安装最新版MySQL8.0.13(最新版MySQL从安装到运行)
原文:【Linux】【MySQL】CentOS7安装最新版MySQL8.0.13(最新版MySQL从安装到运行)   1、前言   框框博客在线报时:2018-11-07 19:31:06   当前MySQL最新版本:8.
4632 0
新手向: ECS搭建Java运行平台, 安装MySQL 以及Tomcat运行
阿里云搭建Java运行环境, 包括MySQL的安装, Tomcat的安装和运行, 以及部分问题解决, 适合新手.
3321 0
Windows 10下安装Mysql 5.7
mysql软件下载 mysql官方下载地址 01 02 03 04 mysql软件安装 05 06 07 08 09 10 ...
851 0
MySQL指令安装
MySQL指令安装 第一步:官网下载mysql压缩文件:https://dev.mysql.com/downloads/mysql/ 第二步:解压文件到 E:\mysql目录下 E:\mysql\mysql-5.
1143 0
Docker安装Mysql服务
拉取官方镜像 # docker pull mysql # docker inspect mysql | grep ''VERSION'' "GOSU_VERSION=1.
1223 0
运维CentOS7下mysql 5.7 下载并安装
打开https://dev.mysql.com/downloads/mysql/这个官网 [root@jiaxin-ceshi src]# wget https://cdn.mysql.com//Downloads/MySQL-5.
1447 0
Linux下yum安装MySQL
Linux下yum安装MySQL
9734 0
13688
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载