选择操作系统

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, 分析出服务器瓶颈。

  1. # 运行监控命令
  2. vmstat 5
  3. # 输出结果
  4. procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
  5. r b swpd free buff cache si so bi bo in cs us sy id wa st
  6. 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 查缺补漏》