〇、优化
优化是有风险的,不要轻易优化;
谁参与优化:研发,DBA等;
优化的大方向:
安全
性能
转:https://www.jianshu.com/p/5dbb5e095c9a
一、优化的范围及思路
优化的范围:
1、运行平台:存储,主机和操作系统
主机架构稳定性
I/O规划及配置
Swap
OS内核参数
网络问题
2、应用程序:(Index,lock,session)
应用程序稳定性和性能
SQL语句性能
串行访问资源
性能欠佳会话管理
3、数据库优化:(内存、数据库设计、参数)
内存
数据库结构(物理&逻辑)
实例配置
二、优化工具
1、操作系统层优化工具介绍
cpu IO MEM
(1)top:
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 995896 total, 815644 free, 69064 used, 111188 buff/cache
KiB Swap: 1048572 total, 1048572 free, 0 used. 785516 avail Mem
①id:空闲的CPU时间片占比
②wa:CPU用来等待的时间片占比
等待IO,全表扫描;等待大的事件,等待锁。
③us:用户程序工作所占用的时间片占比
④sy:内核工作花费CPU时间片占比
bug,中病毒,高并发连接,锁。
⑤KiB Mem :
⑥KiB Swap:建议不要使用
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(临时)
#vim /etc/sysctl.conf
添加:
vm.swappiness=0
sysctl -p
(2)iostat
#dd if=/dev/zero of=/tmp/bigfile bs=1M count=4096

实时监控:
iostat -dm 1
如果没有iostat命令请安装:
yum install -y sysstat
一般情况下,cpu高,IO也应该高。
如果,CPU高,IO比较低:
wait高,IO出问题了(raid问题,过度条带化);
sys高,有可能是锁的问题,需要进一步去数据库中判断。
(3)vmstat
#vmstat 1
2、数据库优化工具
show status
show variables
show index
show processlist
show slave status
show engine innodb status
desc /explain
slowlog
扩展类深度优化:
pt系列(pt-query-digest pt-osc pt-index等)
mysqlslap
sysbench
information_schema
performance_schema
sys
三、优化思路分解
1、硬件优化
(1)主机:
真实的硬件(PC Server): DELL R系列 ,华为,浪潮,HP,联想
云产品:ECS、数据库RDS、DRDS
IBM 小型机 P6 570 595 P7 720 750 780 P8
(2)CPU根据数据库类型
OLTP :在线事务处理;
OLAP :查询类,仓库管理;
IO密集型:线上系统,OLTP主要是IO密集型的业务,高并发,增删改业务;
CPU密集型:数据分析数据处理,OLAP,cpu密集型的,需要CPU高计算能力(i系列,IBM power系列),报表分析,高计算能力;
CPU密集型:I 系列的,主频很高,核心少
IO密集型: E系列(至强),主频相对低,核心数量多
(3)内存
建议2-3倍cpu核心数量 (ECC)
(4)磁盘选择
SATA-III SAS Fc SSD(sata) pci-e ssd Flash
主机 RAID卡的BBU(Battery Backup Unit)关闭,主机备用电源。
(5)存储
根据存储数据种类的不同,选择不同的存储设备
配置合理的RAID级别(raid5、raid10、热备盘)
r0 :条带化 ,性能高
r1 :镜像,安全
r5 :校验+条带化,安全较高+性能较高(读),写性能较低 (适合于读多写少)
r10:安全+性能都很高,最少四块盘,浪费一半的空间(高IO要求)
(6)网络
硬件买好的(单卡单口)
网卡绑定(bonding技术),交换机堆叠
以上问题,提前规避掉。
bonding技术:防止网卡,链路端口,高可用,主备模式比较常用,轮询负载均衡模式。
2、操作系统优化
(1)Swap调整
echo 0 >/proc/sys/vm/swappiness的内容改成0(临时),
/etc/sysctl.conf
上添加vm.swappiness=0(永久)
sysctl -p
这个参数决定了Linux是倾向于使用swap,还是倾向于释放文件系统cache。在内存紧张的情况下,数值越低越倾向于释放文件系统cache。
当然,这个参数只能减少使用swap的概率,并不能避免Linux使用swap。
修改MySQL的配置参数innodb_flush_method,开启O_DIRECT模式
这种情况下,InnoDB的buffer pool会直接绕过文件系统cache来访问磁盘,但是redo log依旧会使用文件系统cache。值得注意的是,Redo log是覆写模式的,即使使用了文件系统的cache,也不会占用太多
(2)IO调度策略
①deadline
centos 7 默认是deadline,不需要调整;
#cat /sys/block/sda/queue/scheduler
centos6临时修改为deadline:
#echo deadline >/sys/block/sda/queue/scheduler
#vi /boot/grub/grub.conf
更改到如下内容:
kernel /boot/vmlinuz-2.6.18-8.el5 ro root=LABEL=/ elevator=deadline rhgb quiet
②IO :
raid
no lvm:不要使用LVM逻辑卷管理;
ext4或xfs
ssd
IO调度策略
提前规划好以上所有问题,减轻MySQL优化的难度。
3、应用端
①开发过程规范,标准
②减少烂SQL:不走索引,复杂逻辑,切割大事务.
③避免业务逻辑错误,避免锁争用.
这个阶段,需要我们DBA深入业务,或者要和开发人员\业务人员配合实现
优化,最根本的是"优化"人。




