选择操作系统
GUN/Linux 是如今高性能的MySQL最常见的的操作系统。 个人的喜爱往往是决定性的因素 CentOS 以后要商业订阅了,如果公司允许的话最优选 Oracle Enterpise 有强大的Oracle公司作背书 Debian 免费稳定强大的系统,我很喜欢的系统之一 …
对于操作系统的选择一定选择较新的稳定版本,不要选择十年前甚至停止更新的发行版本
选择CPU和内存
- 考虑实际业务场景下判断是否需要CPU密集型的工作负载;
1)每个查询只能使用一个CPU (低延迟使用密集CPU)
2)考虑数据库吞吐量、InnoDB缓冲、网络操作、主从同步等多功能(多线程多个CPU)
3)如果实际业务中等待(锁、事务)即使多核CPU、密集CPU 都是无效的
- MySQL 都运行在Intel 或者 AMD 芯片的X86架构下,在MySQL8之后应该尽量的选择64位操作系统
- 内存的配置一般都是根据CPU核数 * 2 的基准来的,尽可能的选择与主板稳定的DDR4内存条
- MySQL 的服务器必须禁用 内存交换区(Swap)
1)对MySQL的性能影响,会降低很大50-100倍
2)MySQL非常活跃的内存交换会导致系统变的无法响应
选择磁盘
- 如果预算够, 上2N的SSD硬盘,一块备份。
- 如果不够就选择10-15K的机械硬盘,做RAID 10。
- 文件系统必须是Ext4 或者XFS 系统, ext3 是没有磁盘日志的数据丢失肯定找不回。
选择网卡
不用说至少双万兆网卡 10Gbps/25Gbps/50Gbps
数据库系统诊断
使用前可以安装 vmstat 或者 iostat, 分析出服务器瓶颈。
# 运行监控命令
vmstat 5
# 输出结果
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 310932 102832 1401188 0 0 943 1099 250 650 3 1 94 2 0
- procs 显示多少进程正在等待CPU
- memory swpd 显示多少块被换出到磁盘 free 空闲 buff 缓冲 cache 系统缓存
- swap 多少块美换人/换出
- io 读取bi 写出bo
- system 每秒中断和上下文切换的数量
- cpu 显示CPU在各种用户上的消耗情况
平衡服务器资源
选择高配CPU,高内存最终的目的都是避免磁盘I/O 因为磁盘IO比在内存慢的多
在系统中:CPU寄存器 —> CPU缓存 —> 内存 —> 磁盘 通过不同的缓存存放热点数据,以获取更快的速度 其中寄存器和CPU缓存是用户不可配置,内存和存储是唯一可以改变的。
CPU 内存 磁盘 三者都始终决定数据库执行效率,因此不管是那一方面的瓶颈都会导致数据库变慢,因此我们在升级数据库或者扩容时候必须考虑均衡的配置
总结
选择好CPU以及内存之后都建议基准测试检查是否能满足以业务需求,然后再次考虑扩容的方向。
更多服务器相关请阅读 《Linux 查缺补漏》