MySQL硬件和系统优化

存储设备

1、强烈建议使用flash设备,优先使用nvme和pcle接口的
	普通sas机械磁盘使用盘片,有转速限制,iops一般150次/秒,i/o访问延迟毫秒级。flash存储电子设备,iops一般4-10万次/秒,i/o延迟微秒级。
	flash设备接口类型:sata、pcle、nvme
		sata接口的ssd外观和普通机械磁盘一样,如Intel s3700,4k随机写iops3.6万次/秒,是普通磁盘200倍,延迟降到65微秒,是普通磁盘1/10
		pcle flash卡要插在主板的专门接口上,不通过硬盘背板和raid卡转发,速率更高。如hgst的ultrastar sn150,iops14万次/秒,普通ssd的3倍,延迟20微秒以下,普通ssd的1/3。但是更换要打开机箱,而sata的ssd随时插拔,不打开机箱。
		sata接口磁盘使用ahci接口标准,无法充分发挥flash介质性能,pcle接口的flash介质采用各个厂商私有接口标准,无法统一。2011年Intel发布了nvme接口标准,适配高速低延迟存储设备,支持nvme接口标准的ssd和pcle flash卡同样可达到iops10万次/秒,i/o延迟20微秒以下。
2、binlog、redo log日志文件和数据文件分开
	日志先行,日志型i/o访问要顺序写延迟低,普通数据异步i/o,底层存储主要是随机读写iops高、并发i/o处理能力强。如果i/o处理请求非常高,日志文件和数据文件在一个存储系统会出现互相冲突。
		raid卡缓存速率和内存速率一个级别,普通hhd和普通ssd顺序i/o也能达到200mb/s,对绝大多数binlog和redo log日志顺序i/o都是满足的。
		binlog和redo log对顺序读请求和延迟要求高的较高的请求放在有raid卡缓存的普通磁盘,能获得内存级别的响应延迟,也能获得快速的顺序i/o能力,成本也低。
	
		数据文件随机i/o并发处理能力强,只能通过pcle flash存储或不带缓存(write through)的ssd提供10万以上的高性能随机i/o读写能力。ssd本身的iops已足够支撑大部分数据库i/o并发,不用缓存中合并,所以不用raid缓存,同时也产生不冲突。
3、使用ssd要关闭raid卡的自动一致性读和充放电配置
4、考虑ssd批次问题
	同一台物理机或主备库中采用不同批次ssd,避免同一批次的ssd有缺陷导致整个物理机或主备库的数据失效

内存

1、越大越好
2、建议关闭numa
	追求极致性能可考虑每个numa节点一个MySQL实例,否则关闭
	numa(non-uniform memory access非一致存储访问)是最新的内存管理技术,与smp(symmetric multi-processor对称多处理器)对应的。
	关闭方式
		在BIOS中关闭numa,每个BIOS不同
		操作系统内核关闭
			/etc/grub.conf的kernel行最后加numa=off,并且在/etc/sysctl.conf中配置vm.zone_reclaim_mode=0尽量收回内存
		启动进程关闭
			numactl --interleave=all mysqld &
3、设置较小的vm.swappiness
	内存交换策略,一个百分比数,0-100,默认60,0表示尽量少交换,100表示尽量将inactive(应用程序申请,但'长时间'不用的内存)内存交换出去,MySQL所在服务器建议设置10,/etc/sysctl.conf,sysctl -p生效
	内存基本满足时,系统根据此参数值判断把内存中很少用到的inactive交换出去还是释放老数据的缓存
	vmstat -an 1查看,或/proc/meminfo更细致查看
	Linux三种内存状态:free、active、inactive
4、考虑开启大页
	大页可大幅降低页表大小,避免内存交换。
	Linux不能把所有空间分配为大页,总大页内存分配不足时,MySQL只会使用非大页内存空间启动。因为大页不会自动释放,预分配的大页会出现闲置,而MySQL只能在非大页的剩余空间中分配,导致发生内存交换
5、BIOS中设置最大性能

文件系统

1、选择xfs或ext4
	对读写性能更好,drop table一个文件非常快
2、文件系统mount参数加上noatime、nobarrier(xfs)
	不记录访问时间
	不强制底层设备刷新缓存,数据库底层存储设备采用raid卡或flash卡,自我保护机制保证数据不会丢失
	ext4指定barrier=0
3、调度策略设为deadline
	提高i/o性能,Linux文件系统设置多种i/o调度策略
	机械磁盘尽量排序和合并多个请求,以达到一次寻道能满足多次i/o请求目的
	deadline策略保证指定时间内被调度到,避免长时间在一个队列中等待导致'饿死'
	echo deadline > /sys/block/sda/queue/scheduler

cpu

1、选择频率较高、核数较多的
2、关闭节能模式
	cpu为服务中最大耗能设备会默认设置节能模式,风扇、内存、磁盘、网卡、pcle接口都有相关设置,尽量关闭节能模式

网络

1、避免域名反解析
	skip_name_resolve=on
2、关闭iptables和selinux
	高并发和大压力的MySQL开启iptables造成队列满,selinux导致MySQL访问文件权限出问题
	采用ssh登录端口修改,在网络交换机设置安全策略比在数据库开启iptables和selinux好得多
3、网卡多队列避免cpu的IRQ瓶颈
	网卡发送和接收数据包通过IRQ中断请求cpu处理,Linux上部分网卡的所有中断请求只通过一个cpu处理,导致cpu成为性能瓶颈
	Intel较新的网卡都支持多队列
	IRQ中断加入多队列网卡或手动把网卡软中断均分到多个cpu上
4、短连接下降低TIME_WAIT socket连接
5、考虑调整sysctl.conf参数
	net.core.rmem_default = 16777216
	net.core.wmem_default = 16777216
	net.core.rmem_max = 16777216
	net.core.wmem_max = 16777216
	net.ipv4.ip_local_port_range = 1024 65535
	net.ipv4.forward = 0
	net.ipv4.conf.default.rp_filter = 1
	net.ipv4.conf.default.accept_source_route = 0
	net.ipv4.tcp_syncookies = 0
	net.ipv4.tcp_rmem= 4096 87380 16777216
	net.ipv4.tcp_wmem= 4096 87380 16777216

其他

1、进程资源限制
	/et/security/limits.conf
	soft nproc 16384
	hard nproc 16384
	soft nofile 65536
	hard nofile 65536
	soft memlock unlimited
	hard memlock unlimited
	soft stack 32768
	hard stack 32768
2、使用64位Linux系统

补充

有关资源限制

[root@mysql_dba::/etc/security/limits.d]#05:41 PM ulimit -a
core file size          (blocks, -c) 20971520	#core dump(转储)文件大小限制,0表示mysqld崩溃了不记录core dump文件
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 3774
max locked memory       (kbytes, -l) unlimited	#最大锁定内存大小,如果MySQL服务器开启大页,而大页要锁定内存,一般可设为unlimited无限制
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65535		#Oracle以块设备访问存储,MySQL以文件形式
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 65535		#单个进程可以拥有的最多子进程数,rhel6新增/etc/security/limits.d/90-nproc.conf,rhel7是/etc/security/limits.d/20-nproc.conf,可能会报错不能创建新的线程,建议直接清理/etc/security/limits.d/*nproc.conf文件,并在limits.conf设置值16384
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

写入/etc/rc.local保证sshd能用里面的参数启动,文件要有执行权限,写入后重启/etc/init.d/sshd

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值