基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
体验高并发 OLTP 场景
更新时间:2026-10-27 15:56:46
OceanBase 数据库基于 LSM-Tree 存储架构和原生分布式设计,在高并发事务处理(OLTP)场景下具备出色的吞吐能力和低延迟表现。本文将通过数据导入和压力测试,帮助您直观体验 OceanBase 数据库的 OLTP 能力。
本文将引导您完成以下体验:
- 数据导入:使用旁路导入(Direct Load)技术,体验 OceanBase 数据库的高吞吐数据加载能力。
- Sysbench 压测:使用
obd test sysbench一键发起 OLTP 基准测试,体验高并发读写性能。 - TPC-C 压测:使用
obd test tpcc一键发起 TPC-C 测试,体验高并发事务处理能力。
说明
本文基于 OceanBase 数据库 V5.0.1(社区版)撰写,文中相关命令和功能说明均以 V5.0.1 版本为准。本文以 部署 OceanBase 中使用 All in One 安装包部署的单节点环境为例。如使用 RPM 包(systemd)部署,obd test 命令不可用,请参考 OceanBase 数据库 Sysbench 测试和 OceanBase 数据库 TPC-C 测试 使用手动方式进行压测。
前提条件
在开始本文操作前,确保满足以下条件:
| 项目 | 描述 |
|---|---|
| OceanBase 数据库 | 已完成部署并成功启动,请参见 部署 OceanBase。 |
| 部署方式 | 使用 All in One 安装包(obd demo)部署,部署名为 demo。 |
| 硬件建议 | 压测场景建议机器配置不低于 4 核 CPU、16 GB 内存。配置越高,压测结果越能体现数据库性能。 |
| obclient | 已安装 obclient 并可正常连接 OceanBase 数据库。使用 All in One 安装包部署时已自动安装。 |
| 网络 | 确保 OceanBase 数据库默认端口 2881 未被防火墙拦截。 |
下文命令行示例中,行首的 $ 表示以普通用户身份执行命令,obclient [数据库名]> 表示在数据库会话中执行 SQL 语句,提示符本身无需输入。
创建测试租户
sys 租户是 OceanBase 数据库的内置管理租户,用于集群管理和运维操作,不建议直接使用 sys 租户进行压测。在进行数据导入和压力测试前,需要先创建一个独立的业务租户,并为其分配合理的资源规格。
资源规格说明
OceanBase 数据库通过"资源单元(Unit Config)→ 资源池(Resource Pool)→ 租户(Tenant)"的层级关系分配计算资源。资源单元定义了 CPU 和内存的规格,是租户可用的资源上限。
注意
资源规格直接影响压测结果。规格过低可能导致内存不足或 CPU 成为瓶颈,规格过高可能超出单节点资源上限。请根据机器实际配置合理设置 MAX_CPU 和 MEMORY_SIZE,详细信息请参见 体验多租户与资源隔离。
操作步骤
使用 root 用户登录集群的 sys 租户(密码为部署时随机生成的密码,可在部署输出或
obd cluster display demo命令的输出中查看,详见 部署 OceanBase):$ obclient -h127.0.0.1 -uroot@sys -P2881 -p -A oceanbase创建资源单元。以下示例创建一个 2C4G 的资源单元,您可根据机器配置调整
MAX_CPU和MEMORY_SIZE:obclient [oceanbase]> CREATE RESOURCE UNIT oltp_unit MAX_CPU=2, MIN_CPU=2, MEMORY_SIZE='4G';返回结果为
Query OK, 0 rows affected。创建资源池并关联资源单元。单节点集群的
ZONE_LIST为('zone1'):obclient [oceanbase]> CREATE RESOURCE POOL oltp_pool UNIT='oltp_unit', UNIT_NUM=1, ZONE_LIST=('zone1');返回结果为
Query OK, 0 rows affected。创建 MySQL 模式租户,关联资源池并设置白名单:
obclient [oceanbase]> CREATE TENANT IF NOT EXISTS oltp_tenant CHARSET='utf8mb4', PRIMARY_ZONE='zone1', RESOURCE_POOL_LIST=('oltp_pool') SET ob_tcp_invited_nodes='%';返回结果为
Query OK, 0 rows affected。创建租户时会实际分配资源,需要一些时间,请耐心等待。确认租户创建成功:
obclient [oceanbase]> SELECT TENANT_ID, TENANT_NAME, TENANT_TYPE, STATUS FROM DBA_OB_TENANTS;当查询结果中出现
TENANT_NAME为oltp_tenant且STATUS为NORMAL的记录时,表示租户创建成功(查询结果中还会包含 sys 租户及各租户对应的 Meta 租户记录)。详细字段说明请参见 DBA_OB_TENANTS。登录新创建的
oltp_tenant租户(新租户 root 用户的密码默认为空,提示输入密码时直接回车即可登录;test为租户默认自带的空数据库,可直接用于测试),后续操作均在此租户中进行:$ obclient -h127.0.0.1 -uroot@oltp_tenant -P2881 -p -A test
说明
如需在 3 节点集群中创建租户,ZONE_LIST 应包含所有 Zone,PRIMARY_ZONE 可设置为 RANDOM 以实现 Leader 随机分布。详细信息请参见 体验多租户与资源隔离。
体验数据导入
OceanBase 数据库支持多种数据导入方式。其中,旁路导入(Direct Load) 能够绕过 SQL 层和内存表(MemTable),将数据直接写入底层存储(SSTable),从而大幅提升大规模数据加载的吞吐量。
旁路导入适用于以下场景:
- 数据迁移与同步中的全量数据装载
- ETL 流程中的大批量数据导入
- 从文本文件或其他数据源向 OceanBase 加载数据
说明
旁路导入是一种导入执行模式,而非独立的语法类别。在 LOAD DATA、INSERT INTO SELECT 等语句中添加 DIRECT(...) Hint 即可启用旁路导入。详细信息请参见 旁路导入概述。
操作步骤
以下示例通过 LOAD DATA INFILE 结合旁路导入 Hint,将 CSV 文件中的数据导入到测试表中。
在 OBServer 节点所在机器上准备测试数据文件:
$ cat > /tmp/tbl1.csv << 'EOF' 1,11 2,22 3,33 EOF设置
secure_file_priv系统变量,允许 OceanBase 从/tmp目录读取文件。出于安全原因,该变量只能通过本地 Unix Socket 连接执行修改。Socket 文件路径与部署方式相关(使用obd demo部署时通常为~/oceanbase-ce/run/sql.sock),可先通过以下命令查找,再使用找到的路径连接oltp_tenant租户(租户 root 用户密码默认为空,提示输入密码时直接回车即可登录):$ find / -name sql.sock 2>/dev/null $ obclient -S /path/to/sql.sock -uroot@oltp_tenant -p连接成功后执行以下语句:
obclient [(none)]> SET GLOBAL secure_file_priv = "/tmp";说明
secure_file_priv用于限制LOAD DATA INFILE等语句的文件访问路径。修改后需重新连接数据库生效。详细信息请参见 secure_file_priv。重新连接
oltp_tenant租户,创建测试表:$ obclient -h127.0.0.1 -uroot@oltp_tenant -P2881 -p -A testobclient [test]> CREATE TABLE tbl2 ( col1 INT PRIMARY KEY, col2 INT );返回结果为
Query OK, 0 rows affected。使用旁路导入将 CSV 文件中的数据导入到
tbl2表:obclient [test]> LOAD DATA /*+ direct(true,1024,'full') parallel(4) */ INFILE '/tmp/tbl1.csv' INTO TABLE tbl2 FIELDS TERMINATED BY ',';说明
Hint 中
direct(true,1024,'full')表示启用全量旁路导入,parallel(4)表示并行度为 4。全量旁路导入适用于空表首次装载;如目标表已有数据,可将第三参数改为'inc'(增量旁路导入)或'inc_replace'(增量替换)。详细信息请参见 使用 LOAD DATA 语句导入数据。命令执行成功后,obclient 将返回导入结果,包含受影响的行数、跳过的行数和警告数:
Query OK, 3 rows affected Records: 3 Deleted: 0 Skipped: 0 Warnings: 0说明
要评估旁路导入的性能优势,可在操作系统中使用
time命令配合obclient -e分别执行带DIRECTHint 和不带的LOAD DATA语句导入相同数据并对比耗时,方法可参见 体验并行导入与高压缩。旁路导入跳过了 SQL 层和 MemTable,在大数据量场景下导入速度通常明显优于常规导入。验证数据是否导入成功:
obclient [test]> SELECT * FROM tbl2;返回结果如下表示导入成功:
+------+------+ | col1 | col2 | +------+------+ | 1 | 11 | | 2 | 22 | | 3 | 33 | +------+------+
体验 Sysbench 压测
Sysbench 是一个基于 LuaJIT 的多线程基准测试工具,常用于评估数据库在不同负载下的性能表现。OceanBase 提供 obd test sysbench 命令,可一键完成测试数据的生成、参数调优、数据加载和压测执行。
关于 Sysbench
Sysbench 主要包含以下几种 OLTP 测试场景:
oltp_read_only:只读测试oltp_write_only:只写测试oltp_read_write:读写混合测试oltp_point_select:点查测试
操作步骤
安装 ob-sysbench:
$ sudo yum install -y yum-utils $ sudo yum-config-manager --add-repo https://mirrors.aliyun.com/oceanbase/OceanBase.repo $ sudo yum install ob-sysbench说明
如机器无法连接外部网络,建议使用可连接外部网络的机器访问 OceanBase 开发工具下载,根据系统版本下载对应安装包后上传安装。
若执行
yum install时报404 for .../repodata/repomd.xml(如 Alibaba Cloud Linux 3 等系统的版本号不在镜像支持的 el7/8/9 范围内),可在安装命令后追加--releasever=8使用 el8 镜像源安装,例如sudo yum install ob-sysbench --releasever=8。
在执行
obd demo部署的同一用户环境下执行以下命令,一键发起读写混合压测(obd 依据当前用户的集群配置定位部署,请在部署时使用的账号下执行):$ obd test sysbench demo --tenant=oltp_tenant --script-name=oltp_read_write.lua --table-size=1000000 --threads=32 --rand-type=uniform命令中的关键参数说明:
参数 说明 demo部署名,使用 obd demo部署时固定为demo。--tenant测试租户名,需提前创建。 --script-nameSysbench 测试脚本名,支持配置多个,以英文逗号分隔。 --table-size每张表初始化的数据行数,默认为 20000。 --threads并发线程数,支持配置多个值,以英文逗号分隔。 --rand-type随机数据生成函数,建议使用 uniform。说明
obd test sysbench会自动完成所有操作,包括测试数据生成、OceanBase 参数调优、数据加载和压测执行,无需额外操作。当中间环节出错时可参考 obd test sysbench 命令进行重试。命令默认初始化 30 张表(可通过
--tables调整),--table-size=1000000表示每张表装载 100 万行数据,数据准备耗时与机器规格相关;压测阶段默认运行 60 秒,可通过--time调整。需要注意的是,obd demo部署的数据盘上限默认为 8 GB,按默认 30 张表、每张 100 万行准备数据时,数据装载和合并的峰值占用会将数据盘占满,导致后续 体验 TPC-C 压测的数据准备阶段长时间无响应。最小规格部署建议将--table-size调小(如100000),或通过--tables减少表数量。
查看测试结果。命令执行完成后,Sysbench 会输出以下关键指标:
指标 说明 QPS(Queries Per Second) 每秒处理的查询数,衡量数据库的查询吞吐量,数值越高表示吞吐能力越强。 TPS(Transactions Per Second) 每秒处理的事务数,衡量事务吞吐能力,数值越高越好。 95% Latency(ms) 95 分位响应时间,表示 95% 的请求在多少毫秒内完成,数值越低表示延迟越低。 测试结果示例如下(实际数值取决于硬件配置和租户规格):
SQL statistics: transactions: 120000 (2000.00 per sec.) queries: 340000 (5666.67 per sec.) ... Latency (ms): min: 1.23 avg: 12.34 max: 98.76 95th percentile: 23.45说明
由于本文使用单节点最小规格部署,测试结果主要用于验证功能流程,不代表 OceanBase 数据库的生产级性能。官方性能测试报告可参见 OceanBase Sysbench 性能测试报告,该报告为 OceanBase 数据库 V4.2.1 版本在 3 节点 32C 128G 集群环境下的测试结果,Point Select 32 线程下 QPS 达 13.8 万、95% 延迟仅 0.26ms。
您也可以运行不同脚本和线程数进行多轮对比测试,观察 QPS 随并发上升的变化趋势以及延迟的增长情况:
$ obd test sysbench demo --tenant=oltp_tenant --script-name=oltp_point_select.lua --table-size=1000000 --threads=64 --rand-type=uniform
说明
Sysbench 测试结果可参考 OceanBase Sysbench 性能测试报告。如需使用手动方式安装和运行 Sysbench,请参见 OceanBase 数据库 Sysbench 测试 中的"手动进行 Sysbench 测试"部分。
体验 TPC-C 压测
TPC-C 是 TPC 组织推出的 OLTP 性能测试标准,使用一个商品销售模型对数据库系统进行测试,是数据库业界性能测试的重要参考。OceanBase 数据库在 2019 年和 2020 年两次刷新了 TPC-C 的世界纪录。
OceanBase 提供 obd test tpcc 命令,可一键完成 TPC-C 测试的数据生成、参数调优、数据加载和压测执行。
操作步骤
安装 obtpcc(TPC-C 测试基于 BenchmarkSQL,需同时安装 Java 运行环境,机器已安装 Java 时可跳过):
$ sudo yum install -y yum-utils $ sudo yum-config-manager --add-repo https://mirrors.aliyun.com/oceanbase/OceanBase.repo $ sudo yum install obtpcc java安装过程中如遇镜像源 404 或无法连接外部网络等问题,处理方式请参见"体验 Sysbench 压测"步骤 1 中的说明。
(可选)若此前已按上文使用
--table-size=1000000完成过 Sysbench 测试,其测试数据会将最小规格部署的数据盘占满,需先重新创建test数据库以释放空间(该操作会删除库中所有数据表,包括 Sysbench 测试表及前文体验数据导入时创建的tbl2表):$ obclient -h127.0.0.1 -uroot@oltp_tenant -P2881 -p -A -e "DROP DATABASE IF EXISTS test; CREATE DATABASE test;"在部署用户环境下(同
obd demo部署用户),执行以下命令一键发起 TPC-C 测试:$ obd test tpcc demo --tenant=oltp_tenant --warehouses=10 --run-mins=5命令中的关键参数说明:
参数 说明 demo部署名,使用 obd demo部署时固定为demo。--tenant测试租户名,需提前创建。 --warehousesTPC-C 测试的仓库数。仓库数决定测试数据规模,默认为 10。如未指定,默认为集群 CPU 数 × 20。 --run-mins测试执行时间,单位:分钟。默认为 10 分钟。 --load-workers数据加载时的并发数。如未指定,默认取单机 CPU 数与租户可用内存(G)/2 中的较小值。 --terminals测试时的虚拟终端数。如未指定,默认取集群 CPU 数 × 15 与仓库数 × 10 中的较小值。 说明
obd test tpcc会自动完成所有操作,包括测试数据生成、参数调优、数据加载和压测执行。执行过程中会详细列出运行步骤和输出,数据量越大耗时越久。查看测试结果。命令执行完成后,会输出 TPC-C 测试的关键指标:
指标 说明 Measured tpmC (NewOrders) 每分钟处理的新订单数,是 TPC-C 测试的核心指标,数值越高表示系统的事务处理能力越强。 Measured tpmTOTAL 每分钟处理的所有事务总数(含新订单、付款、订单状态、配送、库存查询五类事务)。 Transaction Count 测试期间完成的事务总数。 测试结果示例如下(实际数值取决于硬件配置和租户规格):
Measured tpmC (NewOrders) : 9968.91 Measured tpmTOTAL : 22048.03 Session Start = 2026-10-10 12:26:45 Session End = 2026-10-10 12:31:46 Transaction Count = 110406说明
tpmC(Transactions per Minute)是 TPC-C 测试的核心衡量指标,以 NewOrder 事务为准。由于本文使用单节点最小规格部署,测试结果主要用于验证功能流程。官方性能测试报告可参见 OceanBase TPC-C 性能测试报告,该报告为 OceanBase 数据库 V4.2.3 版本在 3 节点 32C 128G 集群、1000 仓规格下的测试结果,测得 tpmC 达 30 万+。
说明
如需使用 BenchmarkSQL 手动进行 TPC-C 测试(包括源码适配、建表、数据加载等完整步骤),请参见 OceanBase 数据库 TPC-C 测试。
下一步
完成本文的 OLTP 压测体验后,您可以继续以下探索之旅:
- 体验 HTAP 混合负载:通过行存+列存表体验 OceanBase 数据库的 HTAP 能力,在同一张表上同时运行事务型和分析型查询。详见 体验 HTAP 混合负载场景。
- 体验多租户特性:创建多个业务租户,体验资源隔离和弹性扩缩容能力。详见 体验多租户与资源隔离。
- 分布式集群压测:如需体验 OceanBase 数据库的 Scalable OLTP 能力(多节点线性扩展),建议使用至少三节点的集群进行测试,并将租户的
PRIMARY_ZONE设置为RANDOM。详见 OceanBase 数据库 TPC-C 测试。
相关文档
- 旁路导入的详细说明请参见 旁路导入概述。
- LOAD DATA 语句的完整语法和更多示例请参见 使用 LOAD DATA 语句导入数据。
- Sysbench 手动测试的完整步骤请参见 OceanBase 数据库 Sysbench 测试。
- TPC-C 手动测试的完整步骤请参见 OceanBase 数据库 TPC-C 测试。
- OBD 测试命令的详细参数请参见 测试命令组。
- 多租户的创建和管理请参见 体验多租户与资源隔离。