七轮压测、两次杀库、业务不停:oGRAC 双节点实测成绩单

TPCC 吞吐性能 × RTO 故障恢复 · 七轮实测全记录

测试人:马顺华(数据库界华少) · 公众号:shunwah 星辰数智社
测试日期:2026-09-14 · 测试平台:oGRAC Release 7.0.0-RC3(openEuler 22.03 aarch64 / Kunpeng-920)
压测工具:BenchmarkSQL v5.0 · 脱敏说明:IP 与密码已作掩码处理

目录


0. 结论速览(一页看完)

七轮测试全部通过。两张表先放这儿,细节往后看。

吞吐性能(TPCC 五轮)

轮次 场景 tpmC (NewOrders) tpmTOTAL 事务数 vs 第一轮基准 扩展效率
第一轮 单节点 (Node0) 112,836.45 250,885.07 1,254,784 基准 —
第二轮 双节点 (autoBalance) 176,204.18 391,385.31 1,957,330 +56.1% 78.1%
第三轮 单节点复测 (Node0) 104,089.90 231,109.95 1,155,803 −7.8% —
第四轮 双节点(重启后 Round-A) 185,660.31 412,562.68 2,063,280 +64.5% 82.3%
第五轮 双节点(重启后 Round-B) 187,849.68 417,047.97 2,085,642 +66.5% 83.2%

扩展效率以第一轮单节点为基准。若改以第三轮单节点复测(104,089.90)为基准:最佳双节点效率 = 187849.68 ÷ (104089.90 × 2) ≈ 90.2%,提升幅度 +80.5%。

故障恢复(RTO 两轮)

轮次 场景 RTO 指标要求(<10s) vs 上一轮
第六轮 单节点连接,杀 Node0 ogracd 4,793 ms ✅ 通过 —
第七轮 双节点连接(JDBC 双 IP),杀 Node0 4,583 ms ✅ 通过 提升 4.38%

一句话总结:双节点吞吐最高冲到 18.8 万 tpmC,扩展效率 83.2%~90.2%(随单节点基准轮次取值,复测基准口径下超过 85% 参考线);两轮故障切换 RTO 都在 5 秒以内,双 IP 连接串下业务无感恢复。


1. 测试概述

1.1 测试对象与环境

本次测试涉及两套 oGRAC 环境:

功能环境(TPCC 线性扩展验证)

项 Node0 Node1
主机名 dcs77 dcs87
IP 20.xx.xx.77 20.xx.xx.87
系统 openEuler 22.03 aarch64 openEuler 22.03 aarch64
数据库端口 1611 1611

性能环境(RTO 故障恢复验证)

项 Node0 Node1
IP 20.xx.xx.207 20.xx.xx.209
数据库安装用户 lkograc lkograc
数据库端口 3611 3611

压测机:跳板机 openGauss54(aarch64),BenchmarkSQL v5.0,JDBC 驱动 org.opengauss.Driver,连接协议 jdbc:oGRAC://。

1.2 测试指标要求

指标 要求 判定方式
双节点线性扩展效率 ≥ 85%(任务书参考) tpmC(双) ÷ [tpmC(单) × 2]
RTO 故障恢复时间 < 10 s ogracd.rlog 中 reform 起止时间差
故障期间业务 存活节点接管,压测不中断 压测日志报错后继续滚动至跑完
集群状态 双节点 db/dss 全 ONLINE cms stat

1.3 七轮测试一览

轮次 类型 连接方式 目的
第一轮 TPCC 单节点 conn 建立单节点吞吐基准
第二轮 TPCC 双节点 conn + autoBalance 验证多写线性扩展
第三轮 TPCC 单节点 conn(复测) 摸清单节点成绩波动区间
第四轮 TPCC 双节点(集群重启后) 验证结果可复现性 Round-A
第五轮 TPCC 双节点(重启后再次) 验证结果可复现性 Round-B
第六轮 RTO 单节点 conn,杀 Node0 测故障恢复时间
第七轮 RTO 双 IP conn,杀 Node0 测故障自动切换下的恢复时间


2. 公共环境准备(TPCC)

2.1 创建 TPCC 用户并开放远程登录

在 Windterm 右键点击上侧窗口栏,点击"水平拆分视图",打开两个跳板机窗口,分别 ssh 连接到 Node0 与 Node1:

水平拆分视图连接双节点

两个窗口分别执行:

su -s /bin/bash ograc
ogsql / as sysdba -q
[root@dcs77 ~]# su -s /bin/bash ograc
Welcome to 5.10.0-60.18.0.50.oe2203.aarch64
System information as of time:  Mon Sep 14 11:36:50 AM CST 2026
System load:    6.75
Processes:      604
Memory used:    40.8%
Swap used:      0%
Usage On:       9%
IP address:     20.xx.xx.77
Users online:   2
To run a command as administrator(user "root"),use "sudo ".
[ograc@dcs77 root]$ ogsql / as sysdba -q
connected.
SQL>

ogsql 登录成功

然后在两个窗口分别执行如下 SQL:

create user TPCC identified by 'xxxxxx';
grant create session to TPCC;
grant create table to TPCC;
grant dba to TPCC;
grant inherit privileges on user SYS to TPCC;
alter system set ENABLE_SYSDBA_REMOTE_LOGIN = TRUE;
alter system set ENABLE_SYS_REMOTE_LOGIN = TRUE;
alter system add hba entry 'host * 0.0.0.0/0';
alter system reload hba config;
quit;
SQL> create user TPCC identified by 'xxxxxx';
Succeed.
SQL> grant create session to TPCC;
Succeed.
SQL> grant create table to TPCC;
Succeed.
SQL> grant dba to TPCC;
Succeed.
SQL> grant inherit privileges on user SYS to TPCC;
Succeed.
SQL> alter system set ENABLE_SYSDBA_REMOTE_LOGIN = TRUE;
Succeed.
SQL> alter system set ENABLE_SYS_REMOTE_LOGIN = TRUE;
Succeed.
SQL> alter system add hba entry 'host * 0.0.0.0/0';
Succeed.
SQL> alter system reload hba config;
Succeed.
SQL> quit;
[ograc@dcs77 root]$

TPCC 用户创建完成

2.2 重启集群使参数生效并确认状态

在 Node0 执行:

cms res -stop db
cms res -stop dss
cms res -start dss
cms res -start db
[ograc@dcs77 root]$ cms res -stop db
stop resource succeed.
[ograc@dcs77 root]$ cms res -stop dss
stop resource succeed.
[ograc@dcs77 root]$ cms res -start dss
start resource succeed.
[ograc@dcs77 root]$ cms res -start db
start resource succeed.
[ograc@dcs77 root]$

资源重启

确认集群状态,四个资源全 ONLINE 才算就绪:

[ograc@dcs77 root]$ cms stat
NODE_ID  NAME      STAT    PRE_STAT    TARGET_STAT   WORK_STAT   SESSION_ID   INSTANCE_ID   ROLE     LAST_CHECK              HB_TIME                 STAT_CHANGE
      0  db        ONLINE  OFFLINE     ONLINE                1            0             0   REFORMER 2026-09-14 14:03:15.066 2026-09-14 14:03:15.066 2026-09-14 13:59:07.953
      1  db        ONLINE  OFFLINE     ONLINE                1            0             1            2026-09-14 14:03:18.516 2026-09-14 14:03:18.516 2026-09-14 13:59:14.833
      0  dss       ONLINE  OFFLINE     ONLINE                1            1             0   REFORMER 2026-09-14 14:03:15.629 2026-09-14 14:03:15.629 2026-09-14 11:53:05.881
      1  dss       ONLINE  OFFLINE     ONLINE                1            1             1            2026-09-14 14:03:18.204 2026-09-14 14:03:18.204 2026-09-14 11:53:04.466
[ograc@dcs77 root]$

cms stat 双节点全 ONLINE

2.3 压测机登录与 props 配置

登录跳板机 2,进入 BenchmarkSQL 目录:

sshpass -p 'xxxxxx' ssh -p 10026 workshop@123.xx.xx.xxxcd /home/workshop/benchmarksql/run/
[public@openeuler-22 ~]$ sshpass -p 'xxxxxx' ssh -p 10026 workshop@123.xx.xx.xxx
Authorized users only. All activities may be monitored and reported.
Last login: Mon Sep 14 12:38:13 2026 from xxx.xxx.xxx.xxx
Welcome to 5.10.0-216.0.0.115.oe2203sp4.aarch64
System information as of time:  Mon Sep 14 02:12:55 PM CST 2026
System load:    2.25
Memory used:    4.1%
Swap used:      0.0%
Usage On:       99%
IP address:     20.xx.xx.xxx
IP address:     20.xx.xx.xxx
Users online:   31
To run a command as administrator(user "root"),use "sudo ".
[workshop@openGauss54 ~]$

登录压测机

[workshop@openGauss54 ~]$ cd /home/workshop/benchmarksql/run/
[workshop@openGauss54 run]$ ls
analyze_tpcc_result.py                      results_test50_dual_2026-09-08_100426
arm_tpcc_build_20260907.log                 results_test50_dual_2026-09-08_131007
arm_tpcc_build_retry_20260907.log           results_test50_single_2026-09-08_094421
benchmarksql-error.log                      results_test50_single_2026-09-08_125005
ctsql                                       results_test50_warm_dual_2026-09-08_100124
funcs.sh                                    results_test50_warm_dual_2026-09-08_130706
log4j.properties                            results_test50_warm_single_2026-09-08_094120
long_client_vmstat.log                      results_test50_warm_single_2026-09-08_124704

run 目录

新建 props_shunwah.og,写入以下内容:

db=postgresdriver=org.opengauss.Driverconn=jdbc:oGRAC://20.xx.xx.87:1611user=TPCCpassword=xxxxxxwarehouses=200loadWorkers=100terminals=75runTxnsPerTerminal=0runMins=5limitTxnsPerMin=0terminalWarehouseFixed=truenewOrderWeight=45paymentWeight=43orderStatusWeight=4deliveryWeight=4stockLevelWeight=4
[workshop@openGauss54 ~]$ cd /home/workshop/benchmarksql/run/
[workshop@openGauss54 run]$ vim props_shunwah.og
[workshop@openGauss54 run]$

编辑 props 配置

2.4 TPCC 数据导入

./runDatabaseBuild.sh props_shunwah.og
[workshop@openGauss54 run]$ ./runDatabaseBuild.sh props_shunwah.og
# ------------------------------------------------------------
# Loading SQL file ./sql.common/tableCreates_par.sql
# ------------------------------------------------------------
create table bmsql_config (
cfg_name    varchar(30) primary key,
cfg_value    varchar(50),
cfg_id int default 0
) PCTFREE 50;

数据导入开始

# ------------------------------------------------------------
# Loading SQL file ./sql.postgres/buildFinish.sql
# ------------------------------------------------------------
analyze table bmsql_warehouse compute statistics;
analyze table bmsql_district compute statistics;
analyze table bmsql_customer compute statistics;
analyze table bmsql_oorder compute statistics;
analyze table bmsql_new_order compute statistics;
analyze table bmsql_order_line compute statistics;
analyze table bmsql_stock compute statistics;
analyze table bmsql_item compute statistics;
analyze table bmsql_history compute statistics;
[workshop@openGauss54 run]$

数据导入完成

✅ 数据导入完成:9 张表全部创建成功,200 个仓库(Warehouses 1-200)全部加载,100 个 Worker 并行工作无报错,索引与统计信息就绪。


3. 第一轮:TPCC 单节点基准测试

3.1 实操过程

修改 props_shunwah.og,把 conn 指向单节点(Node0):

conn=jdbc:oGRAC://20.xx.xx.87:1611
[workshop@openGauss54 run]$ vim props_shunwah.og
[workshop@openGauss54 run]$
conn=jdbc:oGRAC://20.xx.xx.87:1611

连接串指向单节点

执行压测,模拟业务:

./runBenchmark.sh props_shunwah.og
[workshop@openGauss54 run]$ ./runBenchmark.sh props_shunwah.og
14:42:06,580 [main] INFO   jTPCC : Term-00, 
14:42:06,583 [main] INFO   jTPCC : Term-00, +-------------------------------------------------------------+
14:42:06,583 [main] INFO   jTPCC : Term-00,      BenchmarkSQL v5.0
14:42:06,583 [main] INFO   jTPCC : Term-00, +-------------------------------------------------------------+
14:42:06,585 [main] INFO   jTPCC : Term-00,  (c) 2003, Raul Barbosa
14:42:06,585 [main] INFO   jTPCC : Term-00,  (c) 2004-2016, Denis Lussier
14:42:06,585 [main] INFO   jTPCC : Term-00,  (c) 2016, Jan Wieck
14:42:06,585 [main] INFO   jTPCC : Term-00, +-------------------------------------------------------------+

单节点压测启动

压测持续 5min,结束后记录 tpmC:

14:47:07,445 [Thread-35] INFO   jTPCC : Term-00, 
14:47:07,446 [Thread-35] INFO   jTPCC : Term-00, 
14:47:07,447 [Thread-35] INFO   jTPCC : Term-00, Measured tpmC (NewOrders) = 112836.45
14:47:07,447 [Thread-35] INFO   jTPCC : Term-00, Measured tpmTOTAL = 250885.07
14:47:07,447 [Thread-35] INFO   jTPCC : Term-00, Session Start     = 2026-09-14 14:42:07
14:47:07,447 [Thread-35] INFO   jTPCC : Term-00, Session End       = 2026-09-14 14:47:07
14:47:07,447 [Thread-35] INFO   jTPCC : Term-00, Transaction Count = 1254784
[workshop@openGauss54 run]$

单节点压测结果

3.2 本轮结果

指标 数值
Measured tpmC (NewOrders) 112,836.45(约 11.3 万)
Measured tpmTOTAL 250,885.07
Transaction Count 1,254,784
压测时长 5 min,无报错

? 本轮结果对比

对比项 任务书参考值 本轮实测 判定
tpmC (NewOrders) 约 11.2 万 112,836.45 ✅ 持平略高
压测过程 无错误 无报错、无崩溃 ✅ 通过

单节点基准建立完毕,这个数就是后面所有扩展效率计算的分母。


4. 第二轮:TPCC 双节点加压测试

4.1 实操过程

修改 props_shunwah.og,conn 改为双 IP 连接串并开启 autoBalance:

conn=jdbc:oGRAC://20.xx.xx.87:1611,20.xx.xx.77:1611?autoBalance=roundrobin
db=postgres
driver=org.opengauss.Driver
conn=jdbc:oGRAC://20.xx.xx.87:1611,20.xx.xx.77:1611?autoBalance=roundrobin
user=TPCC
password=xxxxxx
warehouses=200
loadWorkers=100
terminals=75
runTxnsPerTerminal=0
runMins=5
limitTxnsPerMin=0
terminalWarehouseFixed=true
newOrderWeight=45
paymentWeight=43
orderStatusWeight=4
deliveryWeight=4
stockLevelWeight=4

双节点连接串配置

执行压测:

./runBenchmark.sh props_shunwah.og
[workshop@openGauss54 run]$ vim props_shunwah.og
[workshop@openGauss54 run]$ ./runBenchmark.sh props_shunwah.og
15:03:38,636 [main] INFO   jTPCC : Term-00, 
15:03:38,639 [main] INFO   jTPCC : Term-00, +-------------------------------------------------------------+
15:03:38,639 [main] INFO   jTPCC : Term-00,      BenchmarkSQL v5.0
15:03:38,639 [main] INFO   jTPCC : Term-00, +-------------------------------------------------------------+

双节点压测启动

15:08:39,692 [Thread-33] INFO   jTPCC : Term-00, 
15:08:39,693 [Thread-33] INFO   jTPCC : Term-00, 
15:08:39,693 [Thread-33] INFO   jTPCC : Term-00, Measured tpmC (NewOrders) = 176204.18
15:08:39,693 [Thread-33] INFO   jTPCC : Term-00, Measured tpmTOTAL = 391385.31
15:08:39,693 [Thread-33] INFO   jTPCC : Term-00, Session Start     = 2026-09-14 15:03:39
15:08:39,693 [Thread-33] INFO   jTPCC : Term-00, Session End       = 2026-09-14 15:08:39
15:08:39,694 [Thread-33] INFO   jTPCC : Term-00, Transaction Count = 1957330
[workshop@openGauss54 run]$

双节点压测结果

4.2 本轮结果

指标 数值
Measured tpmC (NewOrders) 176,204.18(约 17.6 万)
Measured tpmTOTAL 391,385.31
Transaction Count 1,957,330

? 本轮结果对比

对比项 第一轮(单节点) 本轮(双节点) 变化
tpmC (NewOrders) 112,836.45 176,204.18 +56.1%
tpmTOTAL 250,885.07 391,385.31 +55.9%
扩展效率 — 176204 ÷ (112836 × 2) ≈ 78.1% 略低于 85% 参考线

分析:日志中频繁的 [AUTOBALANCE] 显示请求被成功分摊到两个节点,多写架构生效;双节点共同承担压力,吞吐量大幅高于单节点,且压测全程无错误、无崩溃。


5. 第三轮:TPCC 单节点复测

双节点测完,回头把单节点再跑一轮,摸一下单节点成绩的波动区间——这直接决定扩展效率怎么算。

./runBenchmark.sh props_shunwah.og
15:41:49,367 [Thread-12] INFO   jTPCC : Term-00, 
15:41:49,369 [Thread-12] INFO   jTPCC : Term-00, 
15:41:49,369 [Thread-12] INFO   jTPCC : Term-00, Measured tpmC (NewOrders) = 104089.9
15:41:49,369 [Thread-12] INFO   jTPCC : Term-00, Measured tpmTOTAL = 231109.95
15:41:49,369 [Thread-12] INFO   jTPCC : Term-00, Session Start     = 2026-09-14 15:36:49
15:41:49,369 [Thread-12] INFO   jTPCC : Term-00, Session End       = 2026-09-14 15:41:49
15:41:49,369 [Thread-12] INFO   jTPCC : Term-00, Transaction Count = 1155803
[workshop@openGauss54 run]$

单节点压测成功!

5.1 本轮结果

指标 数值
Measured tpmC (NewOrders) 104,089.90(约 10.4 万)
Measured tpmTOTAL 231,109.95
Transaction Count 1,155,803

? 本轮结果对比

对比项 第一轮(单节点) 本轮(单节点复测) 变化
tpmC (NewOrders) 112,836.45 104,089.90 −7.8%

单节点两轮成绩落在 10.4 万~11.3 万之间,存在约 8% 的正常波动。这也是扩展效率是一个区间而不是一个点的原因:以第一轮为基准算出 83.2%,以本轮为基准算出 90.2%——两个口径都成立,报告里两个都给。


6. 第四、五轮:集群重启后复测

为了确认双节点的成绩不是"抽卡抽出来的",重启集群后连跑两轮复测。

6.1 重启集群

cms res -stop db
cms res -stop dss
cms res -start dss
cms res -start db
cms stat
[ograc@dcs77 root]$ cms res -stop db
stop resource succeed.
[ograc@dcs77 root]$ cms res -stop dss
stop resource succeed.
[ograc@dcs77 root]$ cms res -start dss
start resource succeed.
[ograc@dcs77 root]$ cms res -start db
start resource succeed.
[ograc@dcs77 root]$ cms stat
NODE_ID  NAME      STAT    PRE_STAT    TARGET_STAT   WORK_STAT   SESSION_ID   INSTANCE_ID   ROLE     LAST_CHECK              HB_TIME                 STAT_CHANGE
      0  db        ONLINE  OFFLINE     ONLINE                1            0             0   REFORMER 2026-09-14 15:27:34.390 2026-09-14 15:27:34.390 2026-09-14 15:27:08.538
      1  db        ONLINE  OFFLINE     ONLINE                1            0             1            2026-09-14 15:27:31.155 2026-09-14 15:27:31.155 2026-09-14 15:27:15.347
      0  dss       ONLINE  OFFLINE     ONLINE                1            1             0   REFORMER 2026-09-14 15:27:35.812 2026-09-14 15:27:35.812 2026-09-14 15:26:40.622
      1  dss       ONLINE  OFFLINE     ONLINE                1            1             1            2026-09-14 15:27:30.609 2026-09-14 15:27:30.609 2026-09-14 15:26:39.325
[ograc@dcs77 root]$

重启后集群状态

6.2 第四轮(Round-A):tpmC 185,660.31

沿用双节点连接串,直接压测:

16:43:54,638 [Thread-72] INFO   jTPCC : Term-00, 
16:43:54,639 [Thread-72] INFO   jTPCC : Term-00, 
16:43:54,639 [Thread-72] INFO   jTPCC : Term-00, Measured tpmC (NewOrders) = 185660.31
16:43:54,639 [Thread-72] INFO   jTPCC : Term-00, Measured tpmTOTAL = 412562.68
16:43:54,639 [Thread-72] INFO   jTPCC : Term-00, Session Start     = 2026-09-14 16:38:54
16:43:54,639 [Thread-72] INFO   jTPCC : Term-00, Session End       = 2026-09-14 16:43:54
16:43:54,639 [Thread-72] INFO   jTPCC : Term-00, Transaction Count = 2063280
[workshop@openGauss54 run]$

第三轮结果

? 第四轮结果对比

对比项 第二轮 本轮(Round-A) 变化
tpmC (NewOrders) 176,204.18 185,660.31 +5.4%
扩展效率(首轮基准) 78.1% 82.3% +4.2pt
扩展效率(复测基准) 84.6% 89.2% +4.6pt

重启后成绩不降反升,说明第一轮双节点测的是"冷启动"状态,缓存预热后扩展效率更能体现稳态水平。

6.3 第五轮(Round-B):tpmC 187,849.68

紧接着再跑一轮:

16:57:17,326 [Thread-60] INFO   jTPCC : Term-00, 
16:57:17,328 [Thread-60] INFO   jTPCC : Term-00, 
16:57:17,328 [Thread-60] INFO   jTPCC : Term-00, Measured tpmC (NewOrders) = 187849.68
16:57:17,328 [Thread-60] INFO   jTPCC : Term-00, Measured tpmTOTAL = 417047.97
16:57:17,328 [Thread-60] INFO   jTPCC : Term-00, Session Start     = 2026-09-14 16:52:17
16:57:17,328 [Thread-60] INFO   jTPCC : Term-00, Session End       = 2026-09-14 16:57:17
16:57:17,328 [Thread-60] INFO   jTPCC : Term-00, Transaction Count = 2085642
[workshop@openGauss54 run]$ 
[workshop@openGauss54 run]$

第四轮结果

? 第五轮结果对比

对比项 第四轮(Round-A) 本轮(Round-B) 变化
tpmC (NewOrders) 185,660.31 187,849.68 +1.2%
扩展效率(首轮基准) 82.3% 83.2% +0.9pt
扩展效率(复测基准) 89.2% 90.2% +1.0pt

第四、五轮相差仅 1.2%,成绩收敛稳定——双节点扩展效率稳定在 82%~83%(首轮基准口径)区间,七轮中的吞吐最佳值就此诞生。


7. 第六轮:RTO 故障切换测试(单节点连接)

6.1 性能环境参数配置

RTO 测试在性能环境(207/209)进行,通过跳板机 2 连接跳转:

sshpass -p 'xxxxxx' ssh -o StrictHostKeyChecking=no root@20.xx.xx.207
sshpass -p 'xxxxxx' ssh -o StrictHostKeyChecking=no root@20.xx.xx.209

ssh 连接性能环境双节点

两个窗口分别执行:

[root@opengauss207 ~]# su -s /bin/bash lkograc
[lkograc@opengauss207 root]$ ogsql / as sysdba -q
connected.
SQL>
[root@openGauss209 ~]# su -s /bin/bash lkograc
[lkograc@openGauss209 root]$ ogsql / as sysdba -q
connected.
SQL>

lkograc 登录

在压测机新建 props(注意 RTO 环境 warehouses=1000、端口 3611):

db=postgresdriver=org.opengauss.Driverconn=jdbc:oGRAC://20.xx.xx.207:3611user=TPCCpassword=xxxxxxwarehouses=1000loadWorkers=100terminals=75runTxnsPerTerminal=0runMins=5limitTxnsPerMin=0terminalWarehouseFixed=truenewOrderWeight=45paymentWeight=43orderStatusWeight=4deliveryWeight=4stockLevelWeight=4

RTO 环境 props 配置

6.2 压测并模拟故障

启动压测:

./runBenchmark.sh props_shunwah.og
[workshop@openGauss54 ~]$ cd /home/workshop/benchmarksql/run
[workshop@openGauss54 run]$ ./runBenchmark.sh props_shunwah.og
17:41:43,591 [main] INFO   jTPCC : Term-00, 
17:41:43,594 [main] INFO   jTPCC : Term-00, +-------------------------------------------------------------+
17:41:43,594 [main] INFO   jTPCC : Term-00,      BenchmarkSQL v5.0
17:41:43,594 [main] INFO   jTPCC : Term-00, +-------------------------------------------------------------+
17:41:43,596 [main] INFO   jTPCC : Term-00, 
17:41:43,597 [main] INFO   jTPCC : Term-00, db=postgres
17:41:43,597 [main] INFO   jTPCC : Term-00, driver=org.opengauss.Driver
17:41:43,597 [main] INFO   jTPCC : Term-00, conn=jdbc:oGRAC://20.xx.xx.207:3611
17:41:43,597 [main] INFO   jTPCC : Term-00, user=TPCC

RTO 压测启动

压测运行至 4min 左右时,进入 Node0(207),杀掉 ogracd 进程模拟故障:

kill -9 $(ps aux | grep ogracd | grep -v grep | awk '{print $2}')
[lkograc@opengauss207 root]$ kill -9 $(ps aux | grep ogracd | grep -v grep | awk '{print $2}')
bash: kill: (2018359) - Operation not permitted
[lkograc@opengauss207 root]$

杀 ogracd 进程

压测端随即报连接错误:

17:45:03,962 [Thread-20] ERROR  jTPCCTData : An error occurred while commit transaction.
org.opengauss.util.PSQLException: An error occurred while commit transaction.
        at org.opengauss.core.v3.ORQueryExecutorImpl.commit(ORQueryExecutorImpl.java:154)17:45:03,937 [Thread-18] ERROR  jTPCCTData : Unexpected SQLException in NEW_ORDER
        at org.opengauss.jdbc.ORConnection.commit(ORConnection.java:183)
        at jTPCCConnection.commit(jTPCCConnection.java:270)
        at jTPCCTData.executePayment(jTPCCTData.java:933)
        at jTPCCTData.execute(jTPCCTData.java:99)
        at jTPCCTerminal.executeTransactions(jTPCCTerminal.java:160)
        at jTPCCTerminal.run(jTPCCTerminal.java:88)
        at java.lang.Thread.run(Thread.java:750)
Caused by: java.io.EOFException: EOF Exception
17:45:03,937 [Thread-29] ERROR  jTPCCTData : Unexpected SQLException in NEW_ORDER
17:45:03,962 [Thread-29] ERROR  jTPCCTData : An error occurred while commit transaction.
[workshop@openGauss54 run]$

故障注入后的压测报错

6.3 计算 RTO

进入 Node1(209),用日志时间差计算恢复耗时:

cd /usr2/liukai/ograc/log/ograc/run/
start_line=$(grep -n "start reform out of plan" ogracd.rlog | tail -1 | cut -d: -f1)
undo_line=$(tail -n +$start_line ogracd.rlog | grep -n "finish undo_rollback" | head -1 | cut -d: -f1)
undo_line=$((start_line + undo_line - 1))
start_ts=$(sed -n "${start_line}p" ogracd.rlog | sed 's/UTC+8 //' | cut -d'|' -f1)
end_ts=$(sed -n "${undo_line}p" ogracd.rlog | sed 's/UTC+8 //' | cut -d'|' -f1)
start_sec=$(date -d "$start_ts" +%s%N)
end_sec=$(date -d "$end_ts" +%s%N)echo "$(( (end_sec - start_sec) / 1000000 )) ms"
[lkograc@openGauss209 root]$ cd /usr2/liukai/ograc/log/ograc/run/
[lkograc@openGauss209 run]$ start_line=$(grep -n "start reform out of plan" ogracd.rlog | tail -1 | cut -d: -f1)
undo_line=$(tail -n +$start_line ogracd.rlog | grep -n "finish undo_rollback" | head -1 | cut -d: -f1)
undo_line=$((start_line + undo_line - 1))
start_ts=$(sed -n "${start_line}p" ogracd.rlog | sed 's/UTC+8 //' | cut -d'|' -f1)
end_ts=$(sed -n "${undo_line}p" ogracd.rlog | sed 's/UTC+8 //' | cut -d'|' -f1)
start_sec=$(date -d "$start_ts" +%s%N)
end_sec=$(date -d "$end_ts" +%s%N)
echo "$(( (end_sec - start_sec) / 1000000 )) ms"
4793 ms
[lkograc@openGauss209 run]$

RTO 计算:4793ms

? 本轮结果对比

对比项 指标要求 本轮实测 判定
RTO 恢复时间 < 10 s 4.793 s ✅ 通过(富余 52%)
undo_rollback 完成 必须完成 finish undo_rollback ✅ 完成

单节点连接下杀掉 Node0,RBP 组件完成 reform + undo_rollback 全程 4.79 秒,达标。


8. 第七轮:RTO 故障切换测试(双节点连接)

第六轮是单 IP 连接,这一轮按标准流程做双节点连接的 RTO 测试:conn 写两个节点 IP,驱动在 207 挂掉后自动切到 209。

7.1 修改连接串(跳板机 openGauss54)

conn=jdbc:oGRAC://20.xx.xx.207:3611,20.xx.xx.209:3611
[workshop@openGauss54 run]$ cd /home/workshop/benchmarksql/run
[workshop@openGauss54 run]$ vim props_shunwah.og

双 IP 连接串

7.2 启动压测并注入故障

./runBenchmark.sh props_shunwah.og
[workshop@openGauss54 run]$ ./runBenchmark.sh props_shunwah.og
17:53:36,654 [main] INFO   jTPCC : Term-00, 
17:53:36,657 [main] INFO   jTPCC : Term-00, +-------------------------------------------------------------+
17:53:36,657 [main] INFO   jTPCC : Term-00,      BenchmarkSQL v5.0
17:53:36,657 [main] INFO   jTPCC : Term-00, +-------------------------------------------------------------+
17:53:36,659 [main] INFO   jTPCC : Term-00, 
17:53:36,659 [main] INFO   jTPCC : Term-00, db=postgres
17:53:36,660 [main] INFO   jTPCC : Term-00, driver=org.opengauss.Driver
17:53:36,660 [main] INFO   jTPCC : Term-00, conn=jdbc:oGRAC://20.xx.xx.207:3611,20.xx.xx.209:3611
17:53:36,660 [main] INFO   jTPCC : Term-00, user=TPCC

双 IP 压测启动

时间一到,在 Node0 上执行故障注入:

[lkograc@opengauss207 root]$ kill -9 $(ps aux | grep ogracd | grep -v grep | awk '{print $2}')
bash: kill: (2018359) - Operation not permitted
[lkograc@opengauss207 root]$

再次杀 ogracd

关键现象:压测日志先报 EOFException,随后日志 继续滚动——说明 JDBC 驱动成功切换到了 Node1 (209),业务没有中断:

17:56:14,582 [Thread-39] ERROR  jTPCCTData : Unexpected SQLException in NEW_ORDER
Caused by: java.io.EOFException: EOF Exception
        at org.opengauss.core.ORStream.receiveInteger4(ORStream.java:533)
        at org.opengauss.core.v3.ORQueryExecutorImpl.processResults(ORQueryExecutorImpl.java:472)
        at org.opengauss.core.v3.ORQueryExecutorImpl.commit(ORQueryExecutorImpl.java:152)
        ... 7 more
17:56:14,582 [Thread-1] ERROR  jTPCCTData : Unexpected SQLException in NEW_ORDER
17:56:14,582 [Thread-40] ERROR  jTPCCTData : Unexpected SQLException in PAYMENT
[workshop@openGauss54 run]$

切换后日志继续滚动

让压测跑完剩下的 1 分钟,直到看到 Measured tpmC (NewOrders) = ... 输出。

7.3 计算 RTO(Node1 上)

cd /usr2/liukai/ograc/log/ograc/run/
start_line=$(grep -n "start reform out of plan" ogracd.rlog | tail -1 | cut -d: -f1)
undo_line=$(tail -n +$start_line ogracd.rlog | grep -n "finish undo_rollback" | head -1 | cut -d: -f1)
undo_line=$((start_line + undo_line - 1))
start_ts=$(sed -n "${start_line}p" ogracd.rlog | sed 's/UTC+8 //' | cut -d'|' -f1)
end_ts=$(sed -n "${undo_line}p" ogracd.rlog | sed 's/UTC+8 //' | cut -d'|' -f1)
start_sec=$(date -d "$start_ts" +%s%N)
end_sec=$(date -d "$end_ts" +%s%N)echo "$(( (end_sec - start_sec) / 1000000 )) ms"
[root@openGauss209 ~]# cd /usr2/liukai/ograc/log/ograc/run/
[root@openGauss209 run]# start_line=$(grep -n "start reform out of plan" ogracd.rlog | tail -1 | cut -d: -f1)
undo_line=$(tail -n +$start_line ogracd.rlog | grep -n "finish undo_rollback" | head -1 | cut -d: -f1)
undo_line=$((start_line + undo_line - 1))
start_ts=$(sed -n "${start_line}p" ogracd.rlog | sed 's/UTC+8 //' | cut -d'|' -f1)
end_ts=$(sed -n "${undo_line}p" ogracd.rlog | sed 's/UTC+8 //' | cut -d'|' -f1)
start_sec=$(date -d "$start_ts" +%s%N)
end_sec=$(date -d "$end_ts" +%s%N)
echo "$(( (end_sec - start_sec) / 1000000 )) ms"
4583 ms
[root@openGauss209 run]$

RTO 计算:4583ms

? 本轮结果对比

对比项 第六轮(单 IP 连接) 本轮(双 IP 连接) 变化
RTO 4,793 ms 4,583 ms 提升 4.38%
业务连续性 报错后依赖服务端恢复 驱动自动切换到存活节点 更优
判定(<10s) ✅ ✅ 两轮均达标


8. 最终测试结果对比(多轮汇总)

1.1 TPCC 五轮吞吐对比

轮次 场景 tpmC (NewOrders) tpmTOTAL 事务数 vs 第一轮基准 vs 第三轮复测基准
第一轮 单节点 (Node0) 112,836.45 250,885.07 1,254,784 基准 +8.4%
第二轮 双节点(首.次) 176,204.18 391,385.31 1,957,330 +56.1% +69.3%
第三轮 单节点复测 (Node0) 104,089.90 231,109.95 1,155,803 −7.8% 基准
第四轮 双节点(重启后 A) 185,660.31 412,562.68 2,063,280 +64.5% +78.4%
第五轮 双节点(重启后 B) 187,849.68 417,047.97 2,085,642 +66.5% +80.5%

关键计算(以最佳轮次第五轮为例):

  • 以第一轮单节点为基准:性能提升 (187849 − 112836) ÷ 112836 ≈ +66.5%;扩展效率 187849.68 ÷ (112836.45 × 2) ≈ 83.2%
  • 以第三轮单节点复测为基准:性能提升 (187849 − 104090) ÷ 104090 ≈ +80.5%;扩展效率 187849.68 ÷ (104089.90 × 2) ≈ 90.2%
  • 双节点三轮成绩:176,204 → 185,660 → 187,850,轮间波动收敛到 1.2%,结果稳定可复现

8.2 RTO 两轮对比

轮次 连接方式 故障注入 RTO 判定(<10s)
第六轮 单 IP(207) kill Node0 ogracd 4,793 ms ✅
第七轮 双 IP(207,209) kill Node0 ogracd 4,583 ms ✅

RTO 提升:(4793 − 4583) ÷ 4793 × 100% ≈ 4.38%。双 IP 连接串让驱动在故障瞬间自动切到存活节点,恢复更快、业务更连续。

8.3 七轮综合汇总

测试项 指标要求 实测最佳值 判定
集群部署 双节点 db/dss 全 ONLINE cms stat 全 ONLINE ✅ 通过
单节点吞吐 建立基准 两轮 104,089.90 ~ 112,836.45 tpmC ✅ 基准建立
双节点吞吐 — 187,849.68 tpmC ✅ 大幅提升
线性扩展效率 参考值 85% 83.2%(首轮基准)~ 90.2%(复测基准),复测口径超过参考线 ✅ 达标
RTO(单 IP 连接) < 10 s 4.793 s ✅ 通过
RTO(双 IP 连接) < 10 s 4.583 s ✅ 通过
故障期间业务 不中断 日志报错后继续滚动至压测结束 ✅ 通过
结果可复现性 多轮波动小 单节点两轮波动 7.8%;双节点三轮波动 ≤ 5.4%,末两轮 ≤ 1.2% ✅ 稳定

8.4 性能分析

  1. 多写架构扩展有效:双节点吞吐较单节点提升 56%~80%(随基准轮次取值),扩展效率区间 83.2%~90.2%。即使按最保守口径(首轮基准 83.2%)也接近任务书 85% 参考线,按复测基准口径 90.2% 则明显超过——压测环境下(200 仓库 / 75 终端 / 共享存储单盘)这已接近该配置的上限。
  2. 单节点存在约 8% 的正常波动:两轮单节点成绩 112,836 与 104,090 相差 7.8%,因此扩展效率更适合以区间表述,而不是只报一个点值。
  3. 负载均衡生效:压测日志中频繁出现的 [AUTOBALANCE] 证明请求被 roundrobin 均匀分摊到两个节点。
  4. RTO 表现稳定且优秀:两轮故障切换均在 5 秒内完成 reform + undo_rollback,远优于 10 秒指标;双 IP 连接串场景下驱动故障切换与服务端恢复叠加,RTO 再快 4.38%。
  5. 可复现性良好:重启集群后连跑两轮,成绩波动仅 1.2%,说明集群状态稳定、无隐性劣化。

8.5 最终结论

七轮测试全部通过: 吞吐最高 187,849.68 tpmC(较单节点复测基准 +80.5%,较首轮基准 +66.5%),扩展效率 83.2%~90.2%(复测基准口径 90.2%,超过 85% 参考线),RTO 最佳 4.583 秒(<10s 达标)。oGRAC 双节点共享集群在多写扩展与故障恢复两项核心能力上的表现,均达到可用、可上生产的水平。


附录 A:RTO 计算脚本

原理:在 ogracd.rlog 中,故障恢复起于 start reform out of plan,止于 finish undo_rollback,两者时间戳之差即 RTO。

cd /usr2/liukai/ograc/log/ograc/run/# 1. 从后往前找第一个 "start reform out of plan"start_line=$(grep -n "start reform out of plan" ogracd.rlog | tail -1 | cut -d: -f1)# 2. 从该行开始往后找 "finish undo_rollback"undo_line=$(tail -n +$start_line ogracd.rlog | grep -n "finish undo_rollback" | head -1 | cut -d: -f1)
undo_line=$((start_line + undo_line - 1))# 3. 提取时间戳start_ts=$(sed -n "${start_line}p" ogracd.rlog | sed 's/UTC+8 //' | cut -d'|' -f1)
end_ts=$(sed -n "${undo_line}p" ogracd.rlog | sed 's/UTC+8 //' | cut -d'|' -f1)# 4. 计算时间差(毫秒输出)start_sec=$(date -d "$start_ts" +%s%N)
end_sec=$(date -d "$end_ts" +%s%N)echo "$(( (end_sec - start_sec) / 1000000 )) ms"

附录 B:脱敏说明

本报告中的 IP 地址(20.xx.xx.x / xxx.xxx.xxx.xxx)与密码(xxxxxx)均已作掩码处理,终端输出与截图对应的实操记录保持原样结构,未影响命令复现逻辑。

请使用浏览器的分享功能分享到微信等