MYSQL优化之主机层面优化
一、安装前系统环境检测
1、Selinux和系统防火墙iptables需要关闭
要把selinux设置成disable,设置完成后需重启系统
cat /etc/sysconfig/selinux
查看iptables当前状态与关闭过程
chkconfig --list
chkconfig iptables off
chkconfig --list
2、I/O调度系统默认是cfq模式,这里强烈建议用deadline模式
查看I/O调度文件
修改I/O调度器,需要在/etc/grub.conf 中加入elevator=deadline,保证永久生效
3、swap分区的设置
swappiness 值的大小对如何使用swap分区有着很大的影响。
它有0和100两个极限值,0代表最大限度地使用物理内存,然后才使用swap分区,这种行为可能导致系统内存溢出,出现OOM的错误
从而导致MySQL被意外kill掉,所以需要谨慎设置。100则是积极的使用swap分区,并且把内存上面的数据及时搬到swap分区里
cat /proc/sys/vm/swappiness
4、文件系统的选择
建议使用xfs文件系,相比ext4,它更方便管理,支持动态扩容,删除文件也方便
5、操作系统的限制
先来查看一下当前操作系统的限制情况
这里有2个重要的参数,一个叫openfiles,另一个叫max user processes. 如果openfiles设置不合理
当前服务器端连接过多或者表过多时,,会出现文件句柄超限的错误“too many open files”
max user processes 参数的用途是,有时候我们可能会跑多实例,但是发现创建不了新的连接报出“
resource temporarily unavailable”的错误,表示没有足够的资源
防止以上2种报错情况,我们可以系统系统软件的现在/etc/security/limits.conf
numa需要关闭
简单来讲关闭numa功能,可以更好地分配内存,不需要采用swap 的方式来获取内存,因为有经验的系统管理
员和DBA都知道使用swap导致的数据库性能下降有多么的恶心。
Centos 6
在/etc/grub.conf 在kernel 添加numa=off 就行了
# vi /boot/grub/grub.conf #/* Copyright 2010, Oracle. All rights reserved. */ default=0 timeout=5 hiddenmenu foreground=000000 background=ffffff splashimage=(hd0,0)/boot/grub/oracle.xpm.gz title Trying_C0D0_as_HD0 root (hd0,0) kernel /boot/vmlinuz-2.6.18-128.1.16.0.1.el5 root=LABEL=DBSYS ro bootarea=dbsys rhgb quiet console=ttyS0,115200n8 console=tty1 crashkernel=128M@16M numa=off initrd /boot/initrd-2.6.18-128.1.16.0.1.el5.img
关闭NUMA建议方案:
1.在BIOS设置层面关闭NUMA,缺点是需要重启OS。
2.修改GRUB配置文件,缺点也是要重启OS。
在/etc/grub.conf的kernel行最后添加numa=off
如下所示:
kernel /vmlinuz-2.6.32-220.el6.x86_64 ro root=/dev/mapper/VolGroup-root rd_NO_LUKS LANG=en_US.UTF-8 rd_LVM_LV=VolGroup/root rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto rd_LVM_LV=VolGroup/swap rhgb crashkernel=auto quiet KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM numa=off
3.升级MySQL版本到5.6.27及以后,新增了参数 innodb_numa_interleave,只需要重启mysqld实例,无需重启OS,推荐此方案。
配置 innodb_numa_interleave 参数,将其设置为ON