如何通过系统对MySQL进行“体检”

top命令

如下例

Tasks: 550 total,   1 running, 549 sleeping,   0 stopped,   0 zombie
%Cpu(s): 0.7 us, 0.3 sy, 0.0 ni, 98.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 39467241+total, 4412548 free, 18383633+used, 20642352+buff/cache
KiB Swap: 0 total, 0 free, 0 used. 20441100+avail Mem

CPU各项指标说明

0.0 us
用户程序,在运行过程中,使用的CPU时间的占比。
我们希望的是越高越好,尽量控制在90%
0.0 sy
控制: 资源管理,内核的工作(系统调用)
sys高的原因:
1. bug
2. 锁的问题
99.9 id
CPU空间的时间占比

0.0 wa
CPU花在等待上的时间
wa高的原因:
1. 锁
2. IO (raid,过度条带化)
3. 索引
多cpu使用情况监控:
主要判断我们cpu多核心有没有被充分利用。
现象:单颗很忙,其他很闲,对于MySQL来讲,有可能是并发参数设定不合理导致的。

MEM

KiB Mem :  39467241+total,  4412548 free, 18383633+used, 20642352+buff/cache
### 1.2.1 名称介绍
total :总内存大小
free :空闲的
used :在使用的
buff/cache :缓冲区 和 缓存

1. 内存的可用空间的计算 free +buffer cache
2. 内存回收(buffer)的方式:
(1) 写入磁盘
(2) swap
对于数据库来讲:需要将swap屏蔽掉

KiB Swap: 0 total, 0 free, 0 used. 20441100+avail Mem
Linux 6操作系统,默认回收策略(buffer cache),不立即回收策略
内存使用达到100%-60%时候,40% 会使用swap
Linux 7操作系统
内存使用达到100%-30%(70%)时候,才会时候swap

cat /proc/sys/vm/swappiness
10
echo 0 >/proc/sys/vm/swappiness 的内容改成0(临时)
vim /etc/sysctl.conf
添加:
vm.swappiness=0
sysctl -p

iostat 命令

iostat -dk 1

现象说明
1. IO 高 cpu us 也高,属于正常现象
2. CPU us高 IO很低 ,MySQL 不在做增删改查,有可能是存储过程,函数,排序,分组,多表连接
3. Wait,SYS 高 , IO低:IO出问题了,锁等待过多的几率比较大.
IOPS:每秒磁盘最多能够发生的IO次数,这是个定值
频繁小事务,IOPS很高,达到阈值,可能IO吞吐量没超过IO最大吞吐量.无法新的IO了
存储规划有问题.

iostat -x 1

如何通过系统对MySQL进行“体检”

从上面的截图可以清晰的看到,读的比例低于写的比例,说明系统倾向于写会更多,读的会少一些。从后面的%util来看,在读和写一起发生的时候,%util的值会有一些变化,同时这个值也不是很高,对这个实例从收集的信息来看,数据库实例的负载不是很高,系统正在平稳的运行

vmstat命令

vmstat 1

如何通过系统对MySQL进行“体检”

1 标红的是r和b,r表示procs的队列等待,b代表的是procs被阻塞,下面的数字是什么,就代表阻塞了几个.

2 绿色标记的cpu的idle百分比,出现100说明系统的负载现在很低,也是数据库压力小的一个表现。

sar命令

sar -p

如何通过系统对MySQL进行“体检”

标红的%idle:表明cpu运行的很空闲,有大量的cpu资源在空闲,这从机器资源方面也能看的出业务不是很繁忙。

free -h命令

如何通过系统对MySQL进行“体检”

发表评论

相关文章