数据库运维
记录DBA学习成长历程

MySQL优化工具的使用

系统层面优化工具

CPU

【top命令】
【cpu使用情况的平均值】
【CPU每个核心的分别使用的情况(按1)】
【程序是如何使用CPU的】
系统给每个程序分配CPU的时候,以时间来划分表的。
【CPU介绍】
计算: 程序运行,数据处理,二进制计算
控制: 资源管理-OS Kernel(系统调用)--硬件,少量的关于申请资源和释放资源等,控制在CPU可控范围内。
寄存器(L1L2L3)
【CPU分配】
系统给每个程序分配CPU的时候,以时间来划分的。
【CPU各项指标说明】
0.0 us(越高越好)
用户程序,在运行过程中,使用的CPU时间的占比。
我们希望的是越高越好,尽量控制在90%
-----------------------------------------
0.0 sy(越底越好)(一般10%以内)
控制: 资源管理,内核的工作(系统调用)
sys高的原因: 
1. bug ,中病毒了
2. 锁的问题
-----------------------------------------
99.9 id 
CPU空间的时间占比
-----------------------------------------
0.0 wa(一般10%以内)
CPU花在等待上的时间
wa高的原因:
1. 锁
2. IO (raid,过度条带化)
3. 索引
多核cpu使用情况监控:
主要判断我们cpu多核心有没有被充分利用。
现象:单颗很忙,其他很闲,对于MySQL来讲,有可能是并发参数设定不合理导致的。

内存MEM

KiB Mem : 4028432 total, 3774464 free, 116240 used, 137728 buff/cache
total :总内存大小
free :空闲的
used :在使用的
buff/cache :缓冲区 和 缓存
[root@db01 conf]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 48G 6.6G 42G 14% /
devtmpfs 
-----------------------------------------
内存管理子系统
slab Allocator
buddy system 
程序=指令+数据
对于page cache来讲(OS buffer)
1. 内存的可用空间的计算 free +buffer cache 
2. 内存回收(buffer)的方式:
(1) 写入磁盘
(2) swap 
对于数据库来讲:需要将swap屏蔽掉

swap

KiB Swap: 2097148 total, 2097148 free, 0 used. 3701464 avail Mem 
Linux 6操作系统,默认回收策略(buffer cache),不立即回收策略
内存使用达到100%-60%时候,40% 会使用swap
Linux 7操作系统
内存使用达到100%-30%(70%)时候,才会使用swap
cat /proc/sys/vm/swappiness 
30 
echo 0 >/proc/sys/vm/swappiness 的内容改成0(临时)仅限mysql服务器
vim /etc/sysctl.conf
添加:
vm.swappiness=0
sysctl -p

iostat 命令

[root@db01 ~]# yum install -y sysstat
dd if=/dev/zero of=/tmp/bigfile bs=1M count=4096
iostat -dm 1
现象说明
1. IO 高 cpu us 也高,属于正常现象
2. CPU us高 IO很低 ,MySQL 不在做增删改查,有可能是存储过程,函数,排序,分组,多表连接
3. Wait,SYS 高 , IO低:IO出问题了,锁等待过多的几率比较大. 
IOPS:每秒磁盘最多能够发生的IO次数,这是个定值 
频繁小事务,IOPS很高,达到阈值,可能IO吞吐量没超过IO最大吞吐量.无法新的IO了
存储规划有问题.

优化工具汇总

系统:top、iostat

数据库优化工具

show status 
show variables 
show index 
show processlist 
show slave status
show engine innodb status 
desc /explain 
slowlog

扩展类深度优化

mysqldumpslow
pt系列(pt-toolkits)
mysqlslap 
sysbench 
information_schema 
performance_schema
sys
赞(1)
MySQL学习笔记 » MySQL优化工具的使用