简单生活
-
本问是一个系列文章的一部分,该系列较为完整的对各个云厂商的RDS MySQL进行了测试,包括了阿里云、腾讯云、华为云、百度云、AWS、Azure、GCP、Oracle Cloud等,更多参考:云数据库RDS MySQL的性能。
在不同的云厂商,购买相同规格的MySQL实例(如4vCPU-16GB),获得的性能相同吗?
为了回答上面的疑问,于是就开启了我的数据库性能测试之旅。这是第二次测试,上一次是在2023年12月(参考:云数据库(RDS MySQL)性能深度测评与对比)。
性能测试结果与概述
(more…) -
版本现状
终于,在8.0版本发布大概8年后,新的稳定版MySQL 8.4(LTS)终于发布了。按计划,8.0版本将在两年后(2026年04月)终止其生命周期,8.4将成为下一个主流的稳定版本。
参考 历史版本更新
之前的每个大版本都会伴随着一些新的功能发布,参考:MySQL版本历史与主要特性。例如:
- 5.0支持了存储过程、触发器、视图等功能;
- 5.1支持了分区、行复制、API架构;
- 5.6版本支持了半同步(5.5版本)、GTID、online DDL;
- 5.7支持了Group Replication、原生JSON支持、多源复制;
- 8.0支持了CTE、Hash Join、角色系统等
MySQL 8.4(LTS)支持的改进
包括如下(完整列表参考):
- 复制相关的命令、状态,不再兼容
master/slave
语法,全部更新为source/replica
mysql_native_password authentication plugin
默认不在启动,如还需要,则需手动配置- 删除了工具
mysql_ssl_rsa_setup
,如果openssl可用,则会再启动时候自动的生成需要的文件 - 删除了
mysqlpump
,该场景建议使用mysqldump或者MySQL Shell dump - 支持直方图统计信息的自动、手动更新:参考
- 新增了独立的FLUSH PRIVILEGES权限
- 对于
Group Replication
做了较多的改进 - 改变了大量的InnoDB参数的默认值:参考,以提升MySQL在默认情况下的性能表现
整体上,当前的版本现状可以参考下图(来自Wikipedia):
版本点评:最大的改进大概就是版本迭代模式
这是一个让人失望的版本,甚至来说,过去的8.1/8.2/8.3版本都是让人失望的。最大的改进,大概就是版本迭代方式本身了。过去几年,MySQL市场发展较为稳定,兼容生态中,没有能够挑战其地位的产品。曾经,MariaDB、Percona版本都曾经试图与之竞争,不过目前情况,都难以撼动MySQL的位置。这也让这个产品失去了一定的活力。
在全球范围内,云计算已经改变了企业使用基础技术的模式。云计算也在次基础上,开始一定程度的重塑基础软件、甚至基础硬件。开源数据库领域,前两把交椅一直是MySQL与PostgreSQL,从Google Trend和DB-Engines的数据来看,过去十年以来,PostgreSQL一直在缓慢的增长,而MySQL则在巨大领先的空间下,逐步的开始下降。而这让人想起了,浏览器市场的IE和FireFox,以及后来的Chrome。MySQL则很像曾经的IE浏览器,PostgreSQL则很像FireFox,至于Chrome,似乎在开源数据库领域还没有出现这样的产品。
参考链接
-
重要更新
IBM官宣将64亿美元收购HashiCorp(Terraform),以提供丰富的端到端的混合云平台。1 该交易已获得IBM和HashiCorp决策层批准,IBM希望将Terraform、Vault与现有的Red Hat, watsonx等产品整合,以在未来云基础设施时代,获得一块”业务高地”。
OceanBase开发者大会发布 4.3 发版,高调进入实时分析 AP 领域2。将支持行存 & 列存一体化、新向量化引擎、物化视图等能力。
华为云发布星耀数据库服务HRDS,与云耀云服务器HECS组成系列产品,以小规格、低成本、配置简单为特点,服务小型业务场景,如企业建站、小程序、开发测试环境等3
阿里云
- RDS MySQL集群系列实例新增支持跨地域备份,以更好满足合规或容灾恢复等场景。[4]
- RDS PostgreSQL通用云盘版支持数据归档到OSS,以显著降低存储成本。[5]
Azure(微软云)
- Cosmos DB 中的索引建议功能正式发布[6]
- Cosmos DB for PostgreSQL 正式发布异地冗余备份和还原[10]
- Cosmos DB MongoDB正式发布HNSW 向量索引[11]
GCP(谷歌云)
- 托管PostgreSQL数据库的
pgvector
升级到 0.6.0 版 [12] [13]
腾讯云
- 云数据库 MySQL 8.0内核版本更新,发布众多功能以提升数据库性能与稳定性,包括: Nonblocking DDL 功能、并行查询支持分区表、支持虚拟索引、 Fast Query Cache等[15]
- 云数据库 PostgreSQL 发布 database 级别的资源隔离能力。[16]
- 云数据库 PostgreSQL 磁盘容量最低支持10GB,同时提高了可使用的磁盘最大规格。[17]
- 云数据库 SQL Server 国际站支持包年包月计费模式购买时长越长,折扣越多。[18]
参考链接
- [1] https://newsroom.ibm.com/2024-04-24-IBM-to-Acquire-HashiCorp-Inc-Creating-a-Comprehensive-End-to-End-Hybrid-Cloud-Platform
- [2] https://mp.weixin.qq.com/s/-7for6EdQ_L1Lf5XyAcMxA
- [3] https://www.huaweicloud.com/product/hrds.html
- [4] https://help.aliyun.com/zh/rds/apsaradb-rds-for-mysql/use-the-cross-region-backup-feature-of-an-apsaradb-rds-for-mysql-instance
- [5] https://help.aliyun.com/zh/rds/apsaradb-rds-for-postgresql/data-archiving
- [6] https://azure.microsoft.com/en-us/updates/generally-available-index-advisor-in-azure-cosmos-db-helps-optimize-your-index-policy-for-nosql-queries/
- [7] https://azure.microsoft.com/en-us/updates/general-availability-semantic-caching-with-vcore-based-azure-cosmos-db/
- [8] https://azure.microsoft.com/en-us/updates/public-preview-filtered-vector-search-in-vcore-based-azure-cosmos-db-for-mongodb/
- [9] https://azure.microsoft.com/en-us/updates/general-availability-azure-database-for-postgresql-flexible-server-enhanced-disaster-recovery-features/
- [10] https://azure.microsoft.com/en-us/updates/general-availability-azure-cosmos-db-for-postgresql-georedundant-backup-and-restore/
- [11] https://azure.microsoft.com/en-us/updates/general-availability-hnsw-vector-index-in-vcore-based-azure-cosmos-db-for-mongodb/
- [12] https://cloud.google.com/sql/docs/postgres/extensions
- [13] https://cloud.google.com/sql/docs/postgres/self-service-maintenance
- [14] https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-manpol-updates.html
- [15] https://cloud.tencent.com/document/product/236/42539
- [16] https://cloud.tencent.com/document/product/409/105554
- [17] https://cloud.tencent.com/document/product/409/7562
- [18] https://www.tencentcloud.com/document/product/238/55087
-
本问是一个系列文章的一部分,该系列较为完整的对各个云厂商的RDS MySQL进行了测试,包括了阿里云、腾讯云、华为云、百度云、AWS、Azure、GCP、Oracle Cloud等,更多参考:云数据库RDS MySQL的性能。
概述与结论
Oracle在去年引入了ECPU(相对于之前的OCPU),在前面介绍了什么是ECPU,本文则从性能的角度,看看ECPU与之前的OCPU的对比,以验证ECPU就是对应了其他云厂商vCPU的概念。
这里选择了
4 ECPU
的规格MySQL.4
(内存为32GB),以及2 OCPU
的规格MySQL.VM.Standard.E4.2.32GB
进行对比。从如下的性能趋势图可以看到,两者表现出了几乎相同的性能。从价格上,两者的单价分别是SGD 0.050578 vs 0.055552 ( 计算0.052512+0.00304内存 ),即ECPU在该规格下,ECPU拥有几乎相同的CPU和内存,以及性能表现的情况下,ECPU规格要比OCPU规格价格要低8.9% ; (more…) -
从一个Slide介绍中,在Sysbench测试中可以通过hook的方式对一些MySQL报错进行捕获,以避免测试中断。但是做了一些搜索,对该能力并没有文档描述,故做了一些测试,以验证该能力。
在前面的文章“Sysbench压测MySQL中遇到的”Duplicate entry”问题”中,较为详细的分析了在使用了
--skip_trx=on
后 ,Sysbench(版本1.0.20)在测试中遇到的”Duplicate entry”问题。也提到了,可以在脚本中添加hook的方式解决,不过之前并没有对这个方案进行验证。在测试脚本中使用hook的方案,在sysbench的文档中并没有找到详细的说明,这里将对这个方案做一个使用说明,并验证其有效性。我们将分两组对比测试,验证新增hook的有效性,以及新增hook后,对测试结果是否对性能有影响。
测试结果概述
Sysbench的该能力并没有在文档中找到说明,只是在一个Slide中看到的。本文的测试验证了如下内容:
- 在测试lua脚本中,可以使用hook有效的避免”Duplicate entry”等报错带来的测试中断问题
- 使用了hook之后,测试前后性能并没有观测到差异(可以认为,一般来说,发生错误的情况并不多)
所以,后续测试中,如果不可避免的会遇到”Duplicate entry”报错(或其他报错)时,将使用hook的方式来避免。
如何修改测试脚本
具体的,我们在原来的oltp_read_write(sysbench 1.0.20版本)脚本中新增如下代码片段:
function sysbench.hooks.sql_error_ignorable(err) if err.sql_errno == 1062 then -- ER_DUP_ENTRY -- do nothing return true end end
完整的代码可以参考:oltp_read_write_with_hooks.lua
具体的diff文件参考如下:
--- /usr/share/sysbench/oltp_read_write.lua +++ oltp_read_write_with_hooks.lua @@ -21,6 +21,13 @@ require("oltp_common") +function sysbench.hooks.sql_error_ignorable(err) + if err.sql_errno == 1062 then -- ER_DUP_ENTRY + -- do nothing + return true + end +end + function prepare_statements() if not sysbench.opt.skip_trx then prepare_begin()
测试说明
这里依旧使用oltp_read_write负载进行测试,测试时使用了参数
--skip_trx=on --db-ps-mode=disable --rand-type=uniform
,其中参数--skip_trx=on
会带来”Duplicate entry”报错,并导致测试被终止(详细原因分析参考:Sysbench压测MySQL中遇到的”Duplicate entry”问题)。测试分两组,一组是使用原始的oltp_read_write脚本进行测试;另一组,则在脚本中新增上述hook代码。而后观测:
- 使用了hook后,sysbench是否还会因为”Duplicate entry”被终止;
nohup ./sysbench_auto.sh -l ./oltp_read_write_with_hook.lua -hYOUR_HOST -uYOUR_USERNAME -pYOUR_PASSWORD > sysbench_with_hook_with_skip.log 2>&1 &
- 使用hook,与不使用hook,对测试结果是否有影响。
nohup ./sysbench_auto.sh -hYOUR_HOST -uYOUR_USERNAME -pYOUR_PASSWORD > sysbench_no_hook_with_skip.log 2>&1 &
这里的sysbench_auto.sh是一个自己编写的自动化的sysbench测试脚本。会自动化的、顺序的进行多个不同并发下的性能测试。
测试结果详情
没有使用hook的测试中,注意到,在并发度为48、96、128、192时候,测试被终止,而观测日志也看到了是因为“Duplicate entry”所导致的。
threads|transactions| queries| time |avg/Latency|95%/Latency 4| 20311| 365598|300.05| 59.09| 66.84 8| 38195| 687510|300.04| 62.84| 71.83 16| 71296| 1283328|300.07| 67.33| 77.19 24| 101911| 1834398|300.05| 70.65| 81.48 32| 131859| 2373462|300.06| 72.81| 84.47 48| 0| 0| 0.00| 0.00| 0.00 64| 233840| 4209120|300.09| 82.12| 101.13 96| 0| 0| 0.00| 0.00| 0.00 128| 0| 0| 0.00| 0.00| 0.00 192| 0| 0| 0.00| 0.00| 0.00
具体报错:
FATAL: mysql_drv_query() returned error 1062 (Duplicate entry '876663' for key 'sbtest3.PRIMARY') for query
在使用了hook的测试中,注意到,测试顺利的完成了,并没有被终止,而观察日志,也可以看到,期间也是遇到了Duplicate entry报错的,但因为hook的处理,测试并没有终止。
threads|transactions| queries| time |avg/Latency|95%/Latency 4| 19547| 351846|300.06| 61.40| 71.83 8| 37524| 675432|300.06| 63.97| 74.46 16| 70847| 1275246|300.05| 67.76| 78.60 24| 102541| 1845738|300.06| 70.22| 81.48 32| 132424| 2383632|300.07| 72.50| 86.00 48| 187065| 3367170|300.06| 76.98| 92.42 64| 234717| 4224923|300.07| 81.81| 99.33 96| 308744| 5557409|300.06| 93.28| 118.92 128| 341177| 6141186|300.09| 112.57| 147.61 192| 364561| 6562115|300.10| 158.03| 211.60
两组测试性能的对比
根据如上性能测试数据,对QPS(Queries Per Second)进行对比:
可以看到,整体性能波动非常小,优势在较高并发时,性能差异都小于1%;从趋势图上也能够看出来,两者几乎是重合的。
更多测试原始数据
2024-03-26@Benchmark on sysbench with or without hook
host : rds_m6i_xlarge_no_hook_with_skip sub_dir : rds_m6i_xlarge_no_hook_with_skip ins_code : m6i.xlarge ha_type : ha region : tokyo storage_size : 100 iops : 3000
sysbench for host :multiaz.cjzowaj9vqpd.ap-northeast-1.rds.amazonaws.com threads|transactions| queries| time |avg/Latency|95%/Latency 4| 20311| 365598|300.05| 59.09| 66.84 8| 38195| 687510|300.04| 62.84| 71.83 16| 71296| 1283328|300.07| 67.33| 77.19 24| 101911| 1834398|300.05| 70.65| 81.48 32| 131859| 2373462|300.06| 72.81| 84.47 48| 0| 0| 0.00| 0.00| 0.00 64| 233840| 4209120|300.09| 82.12| 101.13 96| 0| 0| 0.00| 0.00| 0.00 128| 0| 0| 0.00| 0.00| 0.00 192| 0| 0| 0.00| 0.00| 0.00
host : rds_m6i_xlarge_with_hook_with_skip sub_dir : rds_m6i_xlarge_with_hook_with_skip ins_code : m6i.xlarge ha_type : ha region : tokyo storage_size : 100 iops : 3000
sysbench for host :multiaz.cjzowaj9vqpd.ap-northeast-1.rds.amazonaws.com threads|transactions| queries| time |avg/Latency|95%/Latency 4| 19547| 351846|300.06| 61.40| 71.83 8| 37524| 675432|300.06| 63.97| 74.46 16| 70847| 1275246|300.05| 67.76| 78.60 24| 102541| 1845738|300.06| 70.22| 81.48 32| 132424| 2383632|300.07| 72.50| 86.00 48| 187065| 3367170|300.06| 76.98| 92.42 64| 234717| 4224923|300.07| 81.81| 99.33 96| 308744| 5557409|300.06| 93.28| 118.92 128| 341177| 6141186|300.09| 112.57| 147.61 192| 364561| 6562115|300.10| 158.03| 211.60