云厂商 SQL Server 性能测试报告
摘要
最近我们对阿里云、腾讯云、华为云以及AWS的SQL Server产品进行了性能测试,本次测试使用了中小型公司常用的2017企业集群4C32G规格,并记录了不同并发数下的TPM值。在并发数为32的情况下,数据库CPU负载基本到达90%左右,该状态下的TPM值:阿里云和腾讯云数字比较接近均为11万左右,华为云到达了21万左右,AWS是13万左右(如图1)。同时,我们对比了四家云厂商该产品的价格,以2017企业集群4C32G 500G储存为例,阿里云、腾讯云、华为云以及AWS分别价格是23、15、22、27元/每小时(如图2)。
图1
图2
说明:阿里云、腾讯云和华为云是上海可用区下的价格,AWS是美东地区(俄亥俄)可用区下的价格。
一、测试工具
本次性能测试使用的是 HammerDB 内置的 TPC-C 基准测试负载。TPC-C 是一种典型的 OLTP 工作负载,其模拟了拥有多个仓库的商品批发销售公司为大量客户发货商品的场景,其中仓库数的调整在测试中能够体现数据库所能够支持的数据规模能力。HammerDB工具介绍见文末参考。
-
Command Line Interface测试
HammerDB支持GUI测试,在使用GUi测试时工具报“未响应”的错误,错误原因未知,所以本次采用CLI方式测试。
注意:在进行CLI测试前,请先使用GUI测试并详细了解HammerDB测试流程,然后再仔细阅读HammerDB CLI帮助文档。
二、测试指标
Transactions Per Minute,表示数据库每分钟执行的事务数量。
HammerDB 中的 TPM 通过 SQL Server 性能计数器 batch requests/sec 获得,因此 TPM 实际上是指 batch requests per minute。
三、测试环境
注意:我们知道不同的数据库参数设置,性能有可能会有较大的差距。本次测试重点关注SQL Server两个参数:max server memory、availability_mode_desc。阿里云、腾讯云、华为云、AWS的max server memory默认值分别是:27999MB、32768MB、26317MB、31273MB;availability_mode_desc参数阿里云和华为云默认是synchronous_commit,而腾讯云该参数值为asynchronous_commit。AWS产品无法获取该参数。本次性能测试未修改max server memory参数,腾讯云的availability_mode_desc改为synchronous_commit,需要联系腾讯云官方修改该参数。
服务端信息
-
阿里云:SQL Server 2017 企业版 独享型 集群版 4C32G SSD云盘 200G 杭州 可用区I
-
腾讯云:SQL Server 2017 企业版 独享型 集群版 4C32G 高性能本地SSD 200G 广州三区
-
华为云:SQL Server 2017 企业版 独享型 集群版 4C32G 超高IO 200G 上海一区
-
AWS:SQLServer 2017 企业版 集群版 4C32G 通用型 SSD 新加坡 1a区
客户端信息
-
华为云、腾讯云和阿里云是Windows server 2019 64位 企业版 8C16G VPC网络
-
AWS是Windows server 2019 64位 企业版 8C32G VPC网络
测试工具信息
-
HammerDB版本:V4.4
四、测试方法
-
进入CLI模式
首先找到HammerDB安装目录,打开hammerdbcli.bat文件,进入CLI模式。
-
构建测试环境数据
Number of Warehouses:仓库个数,将影响生成测试库的大小。
Virtual Users to Build Schema:生成负载数据时的并发连接数(不能超过仓库个数),大小将影响负载数据生成效率。
Virtual Users:虚拟用户数即并发连接数,本文测试了不同的并发连接数。
-
测试具体参数
# 选择测试sql server和TPPCC方式
dbset db mssqls
dbset bm TPC-C
# 仓库大小以及生产仓库时的并发数
diset tpcc mssqls_count_ware 10
diset tpcc mssqls_num_vu 8
# 选择创建测试库名称
diset tpcc mssqls_dbase {tpcc}
# 设置测试前预热时间为2分钟,测试时间5分钟。
diset tpcc mssqls_rampup 2
diset tpcc mssqls_duration 5
# 修改jdbc连接串信息,端口使用默认。
diset connection mssqls_server {ip}
diset connection mssqls_uid {user}
diset connection mssqls_pass {password}
# 登录方式改为sql,默认是windows方式
diset connection mssqls_authentication {sql}
五、测试结果
-
阿里云不同并发数下的性能
用户并发数 | 客户端CPU负载 | SQL Server CPU 负载 | TPM | 备注 |
4 | 低于20% | 60% | 71248 | |
16 | 低于20% | 86% | 98674 | |
32 | 低于20% | 92% | 114219 | |
64 | 低于20% | 94% | 113590 | |
128 | 低于20% | 94% | 110729 | |
256 | 低于20% | 93% | 109029 |
-
腾讯云不同并发数下的性能
用户并发数 | 客户端CPU负载 | SQL Server CPU 负载 | TPM | 备注 |
4 | 低于20% | 64% | 44457 | |
16 | 低于20% | 83% | 91130 | |
32 | 低于20% | 94% | 114839 | |
64 | 低于20% | 98% | 94260 | |
128 | 低于20% | 98% | 88063 | |
256 | 低于20% | 99% | 91724 |
-
华为云不同并发数下的性能
用户并发数 | 客户端CPU负载 | SQL Server CPU 负载 | TPM | 备注 |
4 | 低于20% | 77% | 90348 | |
16 | 低于20% | 90% | 181680 | |
32 | 低于20% | 92% | 211499 | |
64 | 低于20% | 97% | 249609 | |
128 | 低于20% | 100% | 210612 | |
256 | 低于20% | 100% | 207495 |
-
AWS不同并发数下的性能
用户并发数 | 客户端CPU负载 | SQL Server CPU 负载 | TPM | 备注 |
4 | 低于20% | 43% | 60122 | |
16 | 低于20% | 86% | 125310 | |
32 | 低于20% | 92% | 132272 | |
64 | 低于20% | 96% | 139642 | |
128 | 低于20% | 97% | 139498 | |
256 | 低于20% | 96% | 125387 |
由上述表格可以看出,当并发用户数超过一定值之后,TPM不但不是线性增长甚至会下降。线程会出现等待CPU的情况,有概率出现RT延长的情况。在4C32G的规格下,只能满足32个线程的并发,如果线程过多建议使用更高规格的产品。
六、本次测试的最佳实践
Q:如果希望有更丰富产品功能、版本的用户,该如何选择?
A:建议选择阿里云的产品。阿里云的审计功能,支持数据库的SQL审计,而目前腾讯云、华为云的审计均不支持具体sql的审计。同时阿里云最大规格版本也是各云厂家最大的。
Q:如果对SQL Server产品价格敏感的用户,该如何选择?
A:建议选择腾讯云,腾讯云是几家云厂商产品最便宜的,也有着比较好的性价比。
Q:如果希望有丰富的全球可用区的用户,该如何选择?
A:建议选择AWS的产品,AWS的可用区已覆盖全球所有大洲,同时AWS有稳定和不错的性能。
Q:如果希望有更好的性能,该如何选择呢?
A :建议选择华为云产品,从HammerDB的性能测试结果,同规格下华为云的SQL Server产品有更好的性能。
Q:对测试环境和生产环境同时有需求的客户,该选择什么版本?
A:由于SQL Server费用相对于开源数据库价格较贵,建议测试环境建议使用基础版本的,基础版本价格较为便宜。建议按生产环境仍然建议使用企业集群版或者高可用版本。该版本下,当出现故障时可以数据库快速failover,以免影响业务。
Q:假设对数据库有3000 TPS需求的用户,该如何选择规格?
A:一般可选择云厂商的4C32G版本,不过性能涉及因素较多,具体以实际POC为准。
七、总结
本文主要介绍了阿里云、腾讯云、华为云的SQL Server产品的性能,以及产品价格、性能测试工具和相关问题的介绍。希望通过阅读本文,对大家在选择云厂商的SQL Server数据库产品有一定的帮助!
八、参考
https://www.hammerdb.com/document.html --HammerDB文档
https://docs.microsoft.com/en-us/sql --SQL Server文档