暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Kunlun-Storage vs PostgreSQL OLTP 测试

原创 KunlunBase 昆仑数据库 2022-04-25
369

一、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:

shared_buffers = 32768MB wal_level = replica fsync = on synchronous_commit = on wal_sync_method = fdatasync full_page_writes = on
复制

Kunlun-Storage:

innodb_buffer_pool_size 32768MB inndo_flush_at_trx_commit=1 sync_binlog=1 innodb_use_fdatasync = 1
复制
测试背景:

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语句如下:
sum_ranges = { "SELECT SUM(k) FROMsbtest%u WHERE id BETWEEN ? AND ?", t.INT, t.INT}, order_ranges = { "SELECT c FROMsbtest%u WHERE id BETWEEN ? AND ? ORDER BY c", t.INT, t.INT}, distinct_ranges = { "SELECT DISTINCT cFROM sbtest%u WHERE id BETWEEN ? AND ? ORDER BY c", t.INT, t.INT}, index_updates = { "UPDATE sbtest%uSET k=k+1 WHERE id=?", t.INT}, non_index_updates = { "UPDATE sbtest%uSET c=? WHERE id=?", {t.CHAR, 120}, t.INT}, deletes = { "DELETE FROMsbtest%u WHERE id=?", t.INT}, inserts = { "INSERT INTOsbtest%u (id, k, c, pad) VALUES (?, ?, ?, ?)", t.INT, t.INT, {t.CHAR,120}, {t.CHAR, 60}}
复制
测试数据量:

–tables=18 --table-size=10000000

表占用操作系统存储空间:36G
测试脚本:

测试的sysbench 的线程从64 到900 ,每个线程案列执行10分钟,每个场景连续测试时间140分钟。

Kunlun-Storage:

sysbench /usr/local/share/sysbench/oltp_write_only.lua--db-driver=mysql --mysql-host=172.31.41.115 --mysql-port=6001 --mysql-user=pgx --mysql-password=pgx_pwd--mysql-db=vpgtest --tables=18 --table-size=10000000 --report-interval=10--threads=64 --time=600 run sysbench/usr/local/share/sysbench/oltp_update_index.lua --db-driver=mysql --mysql-host=172.31.41.115 --mysql-port=6001 --mysql-user=pgx--mysql-password=pgx_pwd --mysql-db=vpgtest --tables=18 --table-size=10000000--report-interval=10 --threads=64 --time=600 run sysbench/usr/local/share/sysbench/oltp_update_non_index.lua --db-driver=mysql--mysql-host=172.31.41.115 --mysql-port=6001 --mysql-user=pgx --mysql-password=pgx_pwd--mysql-db=vpgtest --tables=18 --table-size=10000000 --report-interval=10--threads=64 --time=600 run
复制

Threads 变化范围:64-128-192-…900

PostgreSQL:

sysbench/usr/local/share/sysbench/oltp_read_write.lua --db-driver=pgsql--pgsql-host=172.31.44.208 --pgsql-port=5432 --pgsql-user=postgres --pgsql-password=postgres--pgsql-db=postgres --tables=18 --table-size=10000000 --report-interval=10--threads=64 --time=600 run sysbench /usr/local/share/sysbench/oltp_update_index.lua--db-driver=pgsql --pgsql-host=172.31.44.208 --pgsql-port=5432 --pgsql-user=postgres --pgsql-password=postgres--pgsql-db=postgres --tables=18 --table-size=10000000 --report-interval=10--threads=64 --time=600 run sysbench/usr/local/share/sysbench/oltp_update_non_index.lua --db-driver=pgsql--pgsql-host=172.31.44.208 --pgsql-port=5432 --pgsql-user=postgres --pgsql-password=postgres--pgsql-db=postgres --tables=18 --table-size=10000000 --report-interval=10--threads=640 --time=600 run
复制

Threads 变化范围:64-128-192-…900

四、 AWS 云上环境测试结果

oltp_write_only 测试

1.png

2.png

oltp_update_index 测试

3.png

4.png

oltp_update_non_index 测试

5.png

6.png

五、本地部署测试结果

oltp_write_only 测试

7.png
8.png

oltp_update_index 测试

9.png
10.png

oltp_update_non_index 测试

11.png
12.png

oltp_read_write 测试

13.png

14.png

六、测试结果及总结

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性能曲线相对平稳.

点击阅读原文

推荐阅读

KunlunBase架构介绍
KunlunBase技术优势介绍
KunlunBase技术特点介绍
KunlunBase集群基本概念介绍

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.kunlunbase.com/ 获取更多信息并且下载昆仑数据库软件、文档和资料。
KunlunBase项目已开源
【GitHub:】
https://github.com/zettadb
【Gitee:】
https://gitee.com/zettadb

最后修改时间:2022-11-29 10:38:41
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

目录
  • 一、Kunlun-Storage简介
  • 二、测试环境
    • 测试软件:
    • 服务器配置:
    • 软件版本:
    • 数据库参数配置:
    • 测试背景:
  • 三、测试数据
    • Sysbench测试场景:
      • 场景一 :oltp_write_only
      • 场景二:oltp_update_index
      • 场景三:oltp_update_non_index
      • 场景四:oltp_read_write.lua
    • 各个操作操作对应的SQL语句如下:
    • 测试数据量:
    • 表占用操作系统存储空间:36G
    • 测试脚本:
  • 四、 AWS 云上环境测试结果
    • oltp_write_only 测试
    • oltp_update_index 测试
    • oltp_update_non_index 测试
  • 五、本地部署测试结果
    • oltp_write_only 测试
    • oltp_update_index 测试
    • oltp_update_non_index 测试
    • oltp_read_write 测试
  • 六、测试结果及总结
  • END