介绍一下一般数据库服务器应该做的一些优化,这里不涉及数据库层面,只考虑服务器监控和优化方面。
主要关注以下三点。
1.1、cpu方面:
vmstat、sar 、top+P、htop、nmon、mpstat
1.2、内存:
free 、ps -aux 、top+M
1.3、IO 设备(磁盘、网络):
iostat 、 ss 、 netstat 、 iptraf、iftop、lsof
补充:
vmstat 命令说明:
iostat 命令说明实例命令: iostat -dk 1 5
iostat -d -k -x 5 (查看设备使用率(%util)和响应时间(await))
在实际的生产中,一般认为 cpu 只要不超过 90% 都没什么问题 ,当然不排除下面这些特殊情况:
2.1、cpu 负载高,IO 负载低
2.2、IO 负载高,cpu 负载低
2.3、IO 和 cpu 负载都很高
硬件不够了或 SQL 存在问题
3.1、主机方面:
3.2、cpu 的选择:
3.3、内存的选择:
3.4、存储方面:
3.5、raid 卡:主机 raid 卡选择:
3.6、网络设备方面:
使用流量支持更高的网络设备(交换机、路由器、网线、网卡、HBA 卡)
注意:以上这些规划应该在初始设计系统时就应该考虑好。
Cpu:
基本不需要调整,在硬件选择方面下功夫即可。
内存:
基本不需要调整,在硬件选择方面下功夫即可。
SWAP:
MySQL 尽量避免使用 swap。阿里云的服务器中默认 swap 为 0
IO :
这个参数决定了 Linux 是倾向于使用 swap,还是倾向于释放文件系统 cache。在内存紧张的情况下,数值越低越倾向于释放文件系统 cache。当然,这个参数只能减少使用 swap 的概率,并不能避免 Linux 使用 swap。
修改 MySQL 的配置参数 innodb_flush_method,开启 O_DIRECT 模式。这种情况下,InnoDB 的 buffer pool 会直接绕过文件系统 cache 来访问磁盘,但是redo log 依旧会使用文件系统 cache。值得注意的是,Redo log 是覆写模式的,即使使用了文件系统的 cache,也不会占用太多。
Linux 系统内核参数优化:
vim /etc/sysctl.conf
net.ipv4.ip_local_port_range = 1024 65535 # 用户端口范围
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_fin_timeout = 30
fs.file-max=65535 # 系统最大文件句柄,控制的是能打开文件最大数量
用户限制参数:
vim /etc/security/limits.conf
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
业务应用和数据库应用独立,防火墙:iptables、selinux 等其他无用服务(关闭):
chkconfig --level 23456 acpid off
chkconfig --level 23456 anacron off
chkconfig --level 23456 autofs off
chkconfig --level 23456 avahi-daemon off
chkconfig --level 23456 bluetooth off
chkconfig --level 23456 cups off
chkconfig --level 23456 firstboot off
chkconfig --level 23456 haldaemon off
chkconfig --level 23456 hplip off
chkconfig --level 23456 ip6tables off
chkconfig --level 23456 iptables off
chkconfig --level 23456 isdn off
chkconfig --level 23456 pcscd off
chkconfig --level 23456 sendmail off
chkconfig --level 23456 yum-updatesd off
觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~