[草稿] 如何选择db服务器的硬件配置
如何根据业务规模来选择CPU、内存、磁盘、以及网络带宽,是一件复杂的事情。
一个最真实的评估,是建立一个接近真实业务应用的操作环境,进行各种压力测试,测算出不同的用户数量下,系统的响应时间和吞吐量,并得出当时服务器的各种资源的利用率情况,完成对硬件资源的整体评估。
[TOC]
cpu
1、cpu 平均使用率建议维持在 20% 以下,以免业务高峰或突发请求把cpu拉满
2、通常,建议cpu核数越多越好,若运行 SQL Server 还要考虑 License 的限制。
注:SQL Server 2008 R2及以前,License 是按每处理器(Per Processor)计数,只计算物理处理器的数量,与物理处理器的内核数量无关。而 SQL Server 2012 及以后,License 是按每核(Per Core)计数,每2核(超线程之前的Core)为一个计费单位,同时计算物理CPU(插槽)的数量,单个插槽最低需要购买4核。
3、业务方面,要考虑SQL逻辑的复杂性
4、若是迁移老业务,则可以参考现有服务器的cpu平均使用率
例如,老服务器CPU(4 Cores)最近30天的平均使用率约40%,那么新机器则建议8 Cores(理论情况下,平均使用率应为20%)
内存
- 1、由于数据库是内存型业务,本着将所有热点数据常驻内存的原则。通常,建议物理内存越大越好。
数据库大小 | 建议内存大小 | 解释 |
---|---|---|
< 64 GB | = DB大小 | 可以认为“所有数据都在内存中” |
> 64 GB | = DB大小 x 80% | 可以认为“热点数据都在内存中” |
- 2、若用户连接数过多,也会占用大量内存
注:SQL Server 默认为每个用户连接分配约 (3 * network_packet_size + 94 kb) = 106 KB的内存(默认的数据包大小为 4 KB,由“网络数据包大小”配置选项控制),用来存放线程的数据结构和相关信息(参考内存管理体系结构)。假如2000个并发,则需要207 MB的内存。而 MySQL 建立一个连接需要多大内存,可参考公式:
sort_buffer_size + join_buffer_size + read_buffer_size + read_rnd_buffer_size + thread_stack
磁盘
- 1、磁盘的大小,要考虑数据库的存量大小和日增长量
- 2、磁盘的性能,要满足iops、tps、连接数的要求
- 3、关于磁盘设备,首推PCIe卡,如果是多块磁盘,磁盘阵列建议 RAID 10
以下是一份不同设备利用sqlio及diskspd压测的64K随机写(64K随机读更好)的性能数据:
设备类型 | IOPS | 吞吐量(64K随机写) | 设备型号 |
---|---|---|---|
SATA 机械盘 x 1 | 70^90 | 10 MB/s | SATA 7400 rpm |
SAS 机械盘 x 1 | 150^180 | 13 MB/s | SAS 15000 rpm |
SSD 800GB x 8 + RAID 10 | 27000 | 1700 MB/s | Intel SATA SSD 800GB |
PCIe卡 3.2 TB | 65773 | 4110 MB/s | Memblaze 3.2TB |
网络
通常网络不存在性能瓶颈,遵循如下几点即可:
- 1、性能考虑,建议万兆或光纤网卡,多网卡则配置bond。
- 2、安全考虑,不建议开通公网地址
- 3、管理考虑,建议双网卡,一个用于业务访问,一个用于数据备份