数据库性能优化:服务器硬件
2019-11-02 本文已影响0人
快乐的提千万
1. CPU
注意事项
- 64位的CPU一定要在64的系统下。
- 对于并发比较高的场景,CPU数量比频率重要。
- 对于CPU密集型场景和复杂SQL,频率更重要。
2. 内存
3. 磁盘IO
选择:
- 机械硬盘:存储空间大,价格低,但是读写较慢。
- 选择:容量,速度,访问时间,主轴转速,物理尺寸。
- 固态硬盘:
- 随机读写也非常快,适合并发。
- RAID:磁盘冗余队列,将多个小硬盘组成大硬盘
- RAID0: 串联,速度和容量N,但是丢失率也N。但是没有冗余。
- RAID1:镜像,速度和成本*N,但是丢失率/N,类似于主从库。
- RAID5:分布式奇偶校验,随机读,顺序读都很快,但是一个坏了就都坏了。
- RAID10:先1再0,成本最高,但是可以提高速度,也降低了丢失率。
- 网络存储
- SAN:通过光钎连接到服务器,设备通过块设备访问,服务器可以将其当做硬盘使用。
- NAS:通过网络连接,基于文件的NFS或SMB协议来访问。
注意事项
- 大型活动的时候不要开计划任务,会导致磁盘IO突然暴增。
- 磁盘的维护比升级更重要。
4. 网卡带宽
注意事项
- 减少从服务器
- 分级缓存
- 减少select *
- 分离业务服务器和数据库服务器网络
2.服务器系统
1.参数优化
网络和内存相关
/etc/sysctl.conf
net.core.somaxconn = 65535 //每个端口最大监听队列长度
net.core.netdev_max_backlog = 65535 //接包速率
net.ipv4.tcp_max_syn_backlog = 65535 //等待队列长度
//加快TCP回收
net.ipv4.tcp_fin_timeout = 10 //等待队列超时设置
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
//TCP缓冲区相关
net.core.wmem_default = 87380
net.core.wmem_max = 16777216
net.core.rmem_default = 87380
net.core.rmem_max= 16777216
//减少失效连接
net.ipv4.tcp_keepalive_time = 120 //时间间隔,确认是否有效
net.ipv4.tcp_keepalive_intvl = 30 //重发时间间隔
net.ipv4.tcp_keepalive_probes = 3 //重发次数
//内存设置
kernel.shmmax = 4294967295 //最重要的参数之一,用于定义单个共享内存段的最大值
注意:这个参数应该设置的足够大,以便能在一个共享内存内存段下容纳整个Innodb缓冲池的大小。建议值为物理内存的一般,或者物理内存-1byte
vm.swappiness = 0 //当内存不足时会有影响,linux内存交换区,为0表示除非虚拟内存满了,否则不使用交换区。
文件相关
/etc/security/limit.conf
PAM,插入式认证模块,打开文件数的限制。
* soft/hard nofile 65535
*表示对多有用户有效。
soft表示当前值,hard表示最大值。
nofile 表示打开文件句柄
63335 表示最大值。
两句话加到limit文件后面,重启生效。
磁盘相关
/sys/block/devname/quque/scheduler
cfq策略 完全公平策略,会插入一些不必要的请求。
noop电梯式调度策略。倾向于饿死读,利于写。适用于闪存设备,RAM,嵌入式设备。
deadline 截止时间调度策略。默认读期限小于写期限,防止饿死。对数据库是最好的。
anticipatory 预料IO调度策略。本质上和deadline一样,但是最后一次读操作后,要等待6秒,才能继续调度。会在每个6秒钟插入一个新的IO操作,而会将一些小的写入流合并成大写入流,用写入延迟换区最大的吞吐量。使用与写入较多的环境。比如文件服务器。
文件系统
/etc/fstab
data = writeback | ordered | journal
noatime,nodiratime
一般选择writeback