由 John Doe 九月 28, 2026
摘要:本报告呈现了 sysbench OLTP 基准测试的全面结果,采用最新的 PostgreSQL 18.6 版本。测试涵盖 3 个缓冲池规格(2GB、12GB、32GB)、6 个并发等级(4 ~ 256 线程)。
目录
测试环境与基础设施
硬件与主机配置
主机硬件配置:
| 组件 | 规格说明 |
|---|---|
| 架构 | x86-64 |
| ECS 实例规格 | 华为云通用计算增强型,c9.8xlarge.4 (32vCPU 128GB),c9.4xlarge.4 (16vCPU 64GB) |
| 存储设备 | 通用型 SSD v2,容量 200GB,IOPS 100000,吞吐量 1000 MB/s |
软件配置:
| 组件 | 规格说明 |
|---|---|
| 操作系统 | Rocky Linux 9.6 64 位 |
| 内核版本 | 5.14.0-570.17.1 |
| PostgreSQL 版本 | 18.6 |
| 基准测试工具 | sysbench 1.1.0,搭载 LuaJIT 2.1.0-beta3 |
| PostgreSQL 客户端 | psql(用于版本检测与配置校验) |
| 监控工具 | nmon(测试期间每秒采集一次) |
缓冲池规格
本次测试数据库总大小为 24GB,设置了三档缓冲池大小,分别对应不同的工作负载特征:
| 档位 | 缓冲池大小 | 工作负载特征 |
|---|---|---|
| 2GB | 2GB | 磁盘 IO 型 — 数据集远大于缓冲池(比例 1:12),存在大量读放大 |
| 12GB | 12GB | 混合型 — 部分数据集可放入内存(比例 1:2),贴近真实生产场景 |
| 32GB | 32GB | 内存命中型 — 全量工作集可放入内存,CPU 与锁机制成为主要瓶颈 |
同时,根据实际的shared_buffers缓冲池大小,对应调整 WAL 日志空间的大小。这样,可以让检查点始终按照固定的时间周期运行。
数据库配置
测试数据包含 20 张表,每张表 500 万行,总计 1 亿行数据。 磁盘上的数据库文件总大小为 24GB。
所有数据库采用统一基础配置以保证公平性,在此之上叠加缓冲池规格配置。
| 参数 | 取值 | 配置说明 |
|---|---|---|
| max_connections | 1000 | 预留充足空间,高于测试最大 256 线程 |
| logging_collector | on | 启用日志收集器 |
测试步骤
创建测试数据库 “bench”:
createdb bench
使用 sysbench 命令导入测试数据到 “bench” 数据库:
sysbench oltp_read_write \
--tables=20 \
--table_size=5000000 \
--pgsql-user=postgres \
--pgsql-db=bench \
prepare
导入测试数据后,清理 “bench” 数据库:
vacuumdb bench
运行性能基准测试:
sysbench oltp_read_write \
--pgsql-user=postgres \
--pgsql-db=bench \
--tables=20 \
--table_size=5000000 \
--threads=128 \
--time=600 \
--report-interval=10 \
run
注意:首次运行为预热过程,不作为正式的测试结果数据。
测试结果
下面收集的测试指标 TPS,为数据库每秒处理的事务数。在 Sysbench 的读写测试模型中,单个事务包含 20 个查询语句,数据库每秒处理的查询数(QPS),约为 TPS 的 20 倍。
场景一:内存命中型
实例规格:c9.8xlarge.4 (32vCPU 128GB)
数据库参数配置:
shared_buffers = 32GB
max_wal_size = 32GB
min_wal_size = 4GB
| Sysbench 线程数 | TPS (PostgreSQL) | TPS (Redrock Postgres) |
|---|---|---|
| 4 | 1752.42 | 1742.26 |
| 16 | 4150.17 | 4404.45 |
| 32 | 5905.28 | 5854.78 |
| 64 | 10144.89 | 10011.48 |
| 128 | 13793.44 | 13895.51 |
| 256 | 15260.80 | 15685.06 |

场景二:混合型
实例规格:c9.4xlarge.4 (16vCPU 64GB)
数据库参数配置:
shared_buffers = 12GB
max_wal_size = 12GB
min_wal_size = 2GB
| Sysbench 线程数 | TPS (PostgreSQL) | TPS (Redrock Postgres) |
|---|---|---|
| 4 | 1452.00 | 1567.00 |
| 16 | 2611.87 | 3097.21 |
| 32 | 3488.18 | 4589.56 |
| 64 | 4682.07 | 5980.58 |
| 128 | 5916.14 | 7093.96 |
| 256 | 5662.79 | 6229.91 |

场景三:磁盘 I/O 型
实例规格:c9.4xlarge.4 (16vCPU 64GB)
数据库参数配置:
shared_buffers = 2GB
max_wal_size = 2GB
min_wal_size = 256MB
| Sysbench 线程数 | TPS (PostgreSQL) | TPS (Redrock Postgres) |
|---|---|---|
| 4 | 1243.74 | 1391.79 |
| 16 | 2180.26 | 2668.91 |
| 32 | 3128.07 | 4038.71 |
| 64 | 3730.14 | 4662.09 |
| 128 | 3950.43 | 5071.72 |
| 256 | 4427.00 | 5336.35 |

参考
Percona:2026 年 MySQL 生态系统性能基准测试报告