Kunlun-Storage vs PostgreSQL OLTP 测试
一、Kunlun-Storage 简介
KunlunStorage 是泽拓科技基于 Percona-mysql-8.0.26 优化的数据库存储服务器,作为 KunlunBase 分布式数据库的存储节点,我们对 percona-mysql 做了大量性能增强,补足了其在 XA 事务处理的容灾和错误处理方面的空白,并增加了一些昆仑数据库集群整体需要的功能,包括 fullsync 复制,update/delete...returning 语句等。
二、测试环境
测试软件:
sysbench 1.1.0-df89d34 (using bundled LuaJIT 2.1.0-beta3(AWS 云上环境)
sysbench 1.0.20 (using system LuaJIT 2.1.0-beta3)(本地部署环境)
服务器配置:
PostgreSQL 和 Kunlun-Storage 各部署在一台:亚马逊 i3.4xlarge(CPU 8cores 16 Threads,内存:122G,存储:2 个 1900 NVMe SSD)上(AWS 云上环境)
PostgreSQL 和 Kunlun-Storage 各部署同一台服务器上(CPU 16 cores 32 Threads, 内存: 64G,存储:1 个 NVMe SSD)上(本地部署环境)
软件版本:
Postgresql:PostgreSQL 14.2 onx86_64-pc-linux-gnu
Kunlun-Storage:8.0.26-16-kunlun-storage
数据库参数配置:
PostgreSQL:
Kunlun-Storage:
测试背景:
PostgreSQL 和 Kunlun-Storage 采用默认的安装配置,只调整了内存参数及上述几个参数,整个测试过程 PostgreSQL 和 Kunlun-Storage 没有任何优化行为。
三、测试数据
测试软件:
sysbench 1.1.0-df89d34 (using bundled LuaJIT 2.1.0-beta3(AWS 云上环境)
sysbench 1.0.20 (using system LuaJIT 2.1.0-beta3)(本地部署环境)
Sysbench 测试场景:
场景一 :oltp_write_only
每个事务执行如下 4 种操作:execute_index_updates()、execute_non_index_updates()、execute_delete_inserts()
场景二:oltp_update_index
每个事务执行如下 1 种操作:execute_index_updates()
场景三:oltp_update_non_index
每个事务执行如下 1 种操作:execute_non_index_updates()
场景四:oltp_read_write.lua
每个事务执行如下 7 种操作:execute_simple_ranges(),execute_sum_ranges()、 execute_order_ranges()、execute_distinct_ranges()、execute_index_updates()、execute_non_index_updates()、execute_delete_inserts()
各个操作操作对应的 SQL 语句如下:
测试数据量:
--tables=18 --table-size=10000000
表占用操作系统存储空间:36G
测试脚本:
测试的 sysbench 的线程从 64 到 900 ,每个线程案列执行 10 分钟,每个场景连续测试时间 140 分钟。
Kunlun-Storage:
Threads 变化范围:64-128-192-......900
PostgreSQL:
Threads 变化范围:64-128-192-......900
四、 AWS 云上环境测试结果
oltp_write_only 测试
oltp_update_index 测试
oltp_update_non_index 测试
五、本地部署测试结果
oltp_write_only 测试
oltp_update_index 测试
oltp_update_non_index 测试
oltp_read_write 测试
六、测试结果及总结
1. 在 OLTP write-only、oltp -read-write 和 OLTP update_index 场景下,Kunlun-Storage 性能明显优于 PostgreSQL。
需要强调的是,PostgreSQL 只要更新任何一个索引字段,都需要在所有索引中插入新的索引行指向新版本的数据行,此时 HOTupdate 无法发挥作用。
因此,update_index 的性能会大幅落后于 MySQL。
在实际生产系统中,更新到索引列是非常常见的现象,特别是还有 Vacuum 带来的 IO 消耗大幅增长,所以 PostgreSQL 的通用的写入性能就相对较差。
2. 在 OLTP update_non_index 场景下,PostgreSQL 的 tps 性能高于 Kunlun-Storage,但 95 percent delay 也高于 KunlunStorage,这表明在更新的字段不是索引字段的场景下,由于 PostgreSQL 通过保持 heap 页面半空,可以实现大多数行的更新是 HOT update,也就是不需要插入索引行,直接在与旧行同一个 heap 页面中写入新版本行数据即可,因此比平均的 QPS 比 Kunlun-Storage 高 5%~30%。
不过从测试结果可以看到,PostgreSQL 的 QPS 和延时的波动比较大,因为无法做 HOT update 的那些更新语句的延时也会大幅提高,也就导致 PostgreSQL95%延时反而比 MySQL 大 10%到 40%左右。
由于大多数实际使用场景下是无法避免更新索引字段的,并且即使对于不更新索引字段的语句,HOT update 也不能保证大概率发生(只有不更新任何索引字段并且 heap 页面有足够空间存储那个被更新的行的新版本的时候 HOT Update 才能发生),因此 PostgreSQL 的这种性能优势的覆盖面过于狭窄。
3. PostgreSQL 在负载动态变化过程中,有明显的延迟抖动,而 Kunlun-Storage 性能曲线相对平稳.
-END-
昆仑数据库是一个 HTAP NewSQL 分布式数据库管理系统,可以满足用户对海量关系数据的存储管理和利用的全方位需求。应用开发者和 DBA 的使用昆仑数据库的体验与单机 MySQL 和单机 PostgreSQL 几乎完全相同,因为首先昆仑数据库支持 PostgreSQL 和 MySQL 双协议,支持标准 SQL:2011 的 DML 语法和功能以及 PostgreSQL 和 MySQL 对标准 SQL 的扩展。同时,昆仑数据库集群支持水平弹性扩容,数据自动拆分,分布式事务处理和分布式查询处理,健壮的容错容灾能力,完善直观的监测分析告警能力,集群数据备份和恢复等 常用的 DBA 数据管理和操作。所有这些功能无需任何应用系统侧的编码工作,也无需 DBA 人工介入,不停服不影响业务正常运行。昆仑数据库具备全面的 OLAP 数据分析能力,通过了 TPC-H 和 TPC-DS 标准测试集,可以实时分析最新的业务数据,帮助用户发掘出数据的价值。昆仑数据库支持公有云和私有云环境的部署,可以与 docker,k8s 等云基础设施无缝协作,可以轻松搭建云数据库服务。请访问 http://www.zettadb.com/ 获取更多信息并且下载昆仑数据库软件、文档和资料。KunlunBase 项目已开源
【GitHub:】https://github.com/zettadb
【Gitee:】https://gitee.com/zettadb
评论