性能测试
测试方式:同一个规格的集群,对比开启EMP功能前后的QPS性能。
测试工具:Sysbench和TPC-H。
测试场景:
OLTP基本场景read_only、write_only、read_write。
TPC-H基准测试。
数据库典型场景:
game_blob:selete, update。
场景特点:大blob的读写,频繁访问和更新大型字段更容易导致读写IO瓶颈。
数据库大查询性能测试。
场景特点:对时延敏感的主键顺序Scan和二级索引回表等场景。
数据库重启测试。
场景特点:数据库升级、升配、重启场景都会产生大量的读IO用来恢复数据库,读延迟直接影响数据库的恢复速度。
测试集群规格:测试8C 64 GB的集群,对比EMP打开前后的性能。
| 系列 | 存储类型 | 规格代码 | CPU和内存 |
|---|---|---|---|
| 集群版独享规格 | PSL5 | polar.mysql.x8.xlarge | 8C 64 GB |
- OLTP测试
测试配置
数据量:32张数据表,每张表7000万行数据,约540 GB数据。
工具:Sysbench基准测试程序oltp_read_only、oltp_write_only、oltp_read_write。
测试方法:
oltp_read_only负载(只读):
sysbench oltp_read_only --tables=32 --table_size=70000000 --threads=32 --rand-type=uniform --time=120 prepare sysbench oltp_read_only --tables=32 --table_size=70000000 --threads=32 --rand-type=uniform --time=120 runoltp_write_only负载(只写):
sysbench oltp_write_only --tables=32 --table_size=70000000 --threads=32 --rand-type=uniform --time=120 prepare sysbench oltp_write_only --tables=32 --table_size=70000000 --threads=32 --rand-type=uniform --time=120 runoltp_read_write负载(读写混合):
sysbench oltp_read_write --tables=32 --table_size=70000000 --threads=32 --rand-type=uniform --time=120 prepare sysbench oltp_read_write --tables=32 --table_size=70000000 --threads=32 --rand-type=uniform --time=120 run
测试结果
三种不同负载的测试结果如下:
- oltp_read_only性能:开启EMP后,QPS提升可达50%。
- oltp_write_only性能:开启EMP后,QPS提升可达30%。
- oltp_read_write性能:开启EMP后,QPS提升可达46%,随着压力的增加,瓶颈在CPU的限制。

TPC-H测试
TPC-H是业界常用的一套基准,由TPC委员会制定发布,用于评测数据库的分析型查询能力。TPC-H查询包含8张数据表、22条复杂的SQL查询,大多数查询包含若干表Join、子查询和Group by等聚合。
说明
本文的TPC-H的实现基于TPC-H的基准测试,并不能与已发布的TPC-H基准测试结果相比较,本文中的测试并不符合TPC-H基准测试的所有要求。
测试配置
- 测试方法:对比EMP开启前后TPC-H负载中每个query执行时间。
- 数据大小:100 GB。
测试结果
选取其中几个典型的query进行对比,EMP功能开启后,耗时降低35%~55%。

数据库典型场景测试
游戏blob
说明
在数据库中,我们常常使用BLOB(Binary Large Object)来存储大块的二进制数据,例如图片、视频等。当这些BLOB数据非常庞大,例如每行数据达到512 KB甚至更大时,我们就称之为“大BLOB场景”。
在大BLOB场景下,频繁地访问和更新这些大字段会对数据库造成巨大的读写压力,容易导致I/O瓶颈,进而影响数据库整体性能。
测试配置
测试数据量:64张数据表,每张表15000行数据,blob长度为512 KB,约520 GB数据。
测试场景:大blob select、update。
测试工具:Sysbench基准测试程序game_blob_update。
测试集群规格:测试8C 64 GB的集群,对比EMP打开前后的性能。
测试方式:
game_blob_update selects(只读)。
sysbench game_blob_update --tables=64 --table_size=15000 --threads=32 --rand-type=uniform --blob_length=524288 --time=120 --selects=1 rungame_blob_update updates(读写混合)。
sysbench game_blob_update --tables=64 --table_size=15000 --threads=32 --rand-type=uniform --blob_length=524288 --time=120 --selects=1 run
测试结果
测试结果如下:
game_blob select性能:开启EMP后,QPS提升高达90%。
game_blob update性能:开启EMP后,QPS提升可达52%。

大数据量查询
测试配置
测试数据量:表大小为1 GB、10 GB、100 GB。
测试方法:测试对时延敏感的主键顺序Scan和二级索引回表。
Scan主键。
SELECT COUNT(*) FROM sbtest1 FORCE INDEX(PRIMARY);Scan二级索引回表。
SELECT MAX(pad) FROM sbtest1 FORCE INDEX(k_1);
测试结果
- 测试结果如下:
- 冷数据场景下Scan主键获得100%左右的速度提升。
- Scan二级索引回表获得95%以上的速度提升。

数据库重启
测试配置
- 测试方法:Sysbench准备数据后,调整刷脏参数使刷脏变慢,插入数据过程中重启数据库进程,统计重启恢复时间。对比开启EMP前后的恢复时间。
- 数据量:240 GB,重启时Redo数据量6 GB。
测试结果
测试结果如下:
重启总耗时获得25%的速度提升。
重启总耗时包括Scan Redo和Apply Page两个阶段,Apply阶段速度提升78%。

相关链接
- 产品文档:https://help.aliyun.com/zh/polardb/polardb-for-mysql/user-guide/polarstore-elastic-memory-pool-emp?spm=a2c4g.11186623.0.i4
- 邀测文档:https://help.aliyun.com/zh/polardb/polardb-for-mysql/invited-test-polarstore-elastic-memory-pool?spm=a2c4g.11186623.0.i21




