---
title: "体验高并发 OLTP 场景 - OceanBase 数据库 V5.0.1 | OceanBase 文档中心"
description: 体验高并发 OLTP 场景 OceanBase 数据库基于 LSM-Tree 存储架构和原生分布式设计，在高并发事务处理（OLTP）场景下具备出色的吞吐能力和低延迟表现。本文将通过数据导入和压力测试，帮助您直观体验 OceanBase 数据库的 OLTP 能力。 本文将引导您完成以下体验： 数据导入 ：使用旁路导入（…
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 5.0.1

# 体验高并发 OLTP 场景

更新时间：2026-10-27 15:56:46

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V5.0.1/zh-CN/200.quickstart/200.experience-high-concurrency-oltp.md)  

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](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000006615008) 中使用 All in One 安装包部署的单节点环境为例。如使用 RPM 包（systemd）部署，`obd test` 命令不可用，请参考 [OceanBase 数据库 Sysbench 测试](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000218151)和 [OceanBase 数据库 TPC-C 测试](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000749127) 使用手动方式进行压测。

## 前提条件

在开始本文操作前，确保满足以下条件：

| 项目 | 描述 |
| --- | --- |
| OceanBase 数据库 | 已完成部署并成功启动，请参见 [部署 OceanBase](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000006615008)。 |
| 部署方式 | 使用 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`，详细信息请参见 [体验多租户与资源隔离](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000007140973)。

### 操作步骤

1. 使用 root 用户登录集群的 sys 租户（密码为部署时随机生成的密码，可在部署输出或 `obd cluster display demo` 命令的输出中查看，详见 [部署 OceanBase](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000006615008)）：

   ```shell
   $ obclient -h127.0.0.1 -uroot@sys -P2881 -p -A oceanbase

   ```
 2. 创建资源单元。以下示例创建一个 2C4G 的资源单元，您可根据机器配置调整 `MAX_CPU` 和 `MEMORY_SIZE`：

   ```sql
   obclient [oceanbase]> CREATE RESOURCE UNIT oltp_unit MAX_CPU=2, MIN_CPU=2, MEMORY_SIZE='4G';

   ```

   返回结果为 `Query OK, 0 rows affected`。
 3. 创建资源池并关联资源单元。单节点集群的 `ZONE_LIST` 为 `('zone1')`：

   ```sql
   obclient [oceanbase]> CREATE RESOURCE POOL oltp_pool UNIT='oltp_unit', UNIT_NUM=1, ZONE_LIST=('zone1');

   ```

   返回结果为 `Query OK, 0 rows affected`。
 4. 创建 MySQL 模式租户，关联资源池并设置白名单：

   ```sql
   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`。创建租户时会实际分配资源，需要一些时间，请耐心等待。
 5. 确认租户创建成功：

   ```sql
   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](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000006617212)。
 6. 登录新创建的 `oltp_tenant` 租户（新租户 root 用户的密码默认为空，提示输入密码时直接回车即可登录；`test` 为租户默认自带的空数据库，可直接用于测试），后续操作均在此租户中进行：

   ```shell
   $ obclient -h127.0.0.1 -uroot@oltp_tenant -P2881 -p -A test

   ```

#### 说明

如需在 3 节点集群中创建租户，`ZONE_LIST` 应包含所有 Zone，`PRIMARY_ZONE` 可设置为 `RANDOM` 以实现 Leader 随机分布。详细信息请参见 [体验多租户与资源隔离](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000007140973)。

## 体验数据导入

OceanBase 数据库支持多种数据导入方式。其中，**旁路导入（Direct Load）** 能够绕过 SQL 层和内存表（MemTable），将数据直接写入底层存储（SSTable），从而大幅提升大规模数据加载的吞吐量。

旁路导入适用于以下场景：

- 数据迁移与同步中的全量数据装载
 - ETL 流程中的大批量数据导入
 - 从文本文件或其他数据源向 OceanBase 加载数据

#### 说明

旁路导入是一种**导入执行模式**，而非独立的语法类别。在 `LOAD DATA`、`INSERT INTO SELECT` 等语句中添加 `DIRECT(...)` Hint 即可启用旁路导入。详细信息请参见 [旁路导入概述](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000006615117)。

### 操作步骤

以下示例通过 `LOAD DATA INFILE` 结合旁路导入 Hint，将 CSV 文件中的数据导入到测试表中。

1. 在 OBServer 节点所在机器上准备测试数据文件：

   ```shell
   $ cat > /tmp/tbl1.csv << 'EOF'
   1,11
   2,22
   3,33
   EOF

   ```
 2. 设置 `secure_file_priv` 系统变量，允许 OceanBase 从 `/tmp` 目录读取文件。出于安全原因，该变量只能通过本地 Unix Socket 连接执行修改。Socket 文件路径与部署方式相关（使用 `obd demo` 部署时通常为 `~/oceanbase-ce/run/sql.sock`），可先通过以下命令查找，再使用找到的路径连接 `oltp_tenant` 租户（租户 root 用户密码默认为空，提示输入密码时直接回车即可登录）：

   ```shell
   $ find / -name sql.sock 2>/dev/null
   $ obclient -S /path/to/sql.sock -uroot@oltp_tenant -p

   ```

   连接成功后执行以下语句：

   ```sql
   obclient [(none)]> SET GLOBAL secure_file_priv = "/tmp";

   ```

   #### 说明

   `secure_file_priv` 用于限制 `LOAD DATA INFILE` 等语句的文件访问路径。修改后需重新连接数据库生效。详细信息请参见 [secure_file_priv](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000006618504)。
 3. 重新连接 `oltp_tenant` 租户，创建测试表：

   ```

   ```sql
   obclient [test]> CREATE TABLE tbl2 (
                       col1 INT PRIMARY KEY,
                       col2 INT
                    );

   ```

   返回结果为 `Query OK, 0 rows affected`。
 4. 使用旁路导入将 CSV 文件中的数据导入到 `tbl2` 表：

   ```sql
   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 语句导入数据](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000006627453)。

   命令执行成功后，obclient 将返回导入结果，包含受影响的行数、跳过的行数和警告数：

   ```shell
   Query OK, 3 rows affected
   Records: 3  Deleted: 0  Skipped: 0  Warnings: 0

   ```

   #### 说明

   要评估旁路导入的性能优势，可在操作系统中使用 `time` 命令配合 `obclient -e` 分别执行带 `DIRECT` Hint 和不带的 `LOAD DATA` 语句导入相同数据并对比耗时，方法可参见 [体验并行导入与高压缩](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000007140976)。旁路导入跳过了 SQL 层和 MemTable，在大数据量场景下导入速度通常明显优于常规导入。
 5. 验证数据是否导入成功：

   ```sql
   obclient [test]> SELECT * FROM tbl2;

   ```

   返回结果如下表示导入成功：

   ```shell
   +------+------+
   | 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`：点查测试

### 操作步骤

1. 安装 ob-sysbench：

   ```shell
   $ 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 开发工具下载](https://mirrors.oceanbase.com/development-kit/)，根据系统版本下载对应安装包后上传安装。
      - 若执行 `yum install` 时报 `404 for .../repodata/repomd.xml`（如 Alibaba Cloud Linux 3 等系统的版本号不在镜像支持的 el7/8/9 范围内），可在安装命令后追加 `--releasever=8` 使用 el8 镜像源安装，例如 `sudo yum install ob-sysbench --releasever=8`。
 2. 在执行 `obd demo` 部署的同一用户环境下执行以下命令，一键发起读写混合压测（obd 依据当前用户的集群配置定位部署，请在部署时使用的账号下执行）：

   ```shell
   $ 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-name` | Sysbench 测试脚本名，支持配置多个，以英文逗号分隔。 |
   | `--table-size` | 每张表初始化的数据行数，默认为 20000。 |
   | `--threads` | 并发线程数，支持配置多个值，以英文逗号分隔。 |
   | `--rand-type` | 随机数据生成函数，建议使用 `uniform`。 |

   #### 说明

      - `obd test sysbench` 会自动完成所有操作，包括测试数据生成、OceanBase 参数调优、数据加载和压测执行，无需额外操作。当中间环节出错时可参考 [obd test sysbench](https://www.oceanbase.com/docs/community-obd-cn-10000000000768424) 命令进行重试。
      - 命令默认初始化 30 张表（可通过 `--tables` 调整），`--table-size=1000000` 表示每张表装载 100 万行数据，数据准备耗时与机器规格相关；压测阶段默认运行 60 秒，可通过 `--time` 调整。需要注意的是，`obd demo` 部署的数据盘上限默认为 8 GB，按默认 30 张表、每张 100 万行准备数据时，数据装载和合并的峰值占用会将数据盘占满，导致后续 **体验 TPC-C 压测**的数据准备阶段长时间无响应。最小规格部署建议将 `--table-size` 调小（如 `100000`），或通过 `--tables` 减少表数量。
 3. 查看测试结果。命令执行完成后，Sysbench 会输出以下关键指标：

   | 指标 | 说明 |
   | --- | --- |
   | **QPS**（Queries Per Second） | 每秒处理的查询数，衡量数据库的查询吞吐量，数值越高表示吞吐能力越强。 |
   | **TPS**（Transactions Per Second） | 每秒处理的事务数，衡量事务吞吐能力，数值越高越好。 |
   | **95% Latency**（ms） | 95 分位响应时间，表示 95% 的请求在多少毫秒内完成，数值越低表示延迟越低。 |

   测试结果示例如下（实际数值取决于硬件配置和租户规格）：

   ```shell
   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 性能测试报告](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000218152)，该报告为 OceanBase 数据库 V4.2.1 版本在 3 节点 32C 128G 集群环境下的测试结果，Point Select 32 线程下 QPS 达 13.8 万、95% 延迟仅 0.26ms。
 4. 您也可以运行不同脚本和线程数进行多轮对比测试，观察 QPS 随并发上升的变化趋势以及延迟的增长情况：

   ```shell
   $ obd test sysbench demo --tenant=oltp_tenant --script-name=oltp_point_select.lua --table-size=1000000 --threads=64 --rand-type=uniform

   ```

#### 说明

Sysbench 测试结果可参考 [OceanBase Sysbench 性能测试报告](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000218152)。如需使用手动方式安装和运行 Sysbench，请参见 [OceanBase 数据库 Sysbench 测试](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000218151) 中的"手动进行 Sysbench 测试"部分。

## 体验 TPC-C 压测

TPC-C 是 TPC 组织推出的 OLTP 性能测试标准，使用一个商品销售模型对数据库系统进行测试，是数据库业界性能测试的重要参考。OceanBase 数据库在 2019 年和 2020 年两次刷新了 TPC-C 的世界纪录。

OceanBase 提供 `obd test tpcc` 命令，可一键完成 TPC-C 测试的数据生成、参数调优、数据加载和压测执行。

### 操作步骤

1. 安装 obtpcc（TPC-C 测试基于 BenchmarkSQL，需同时安装 Java 运行环境，机器已安装 Java 时可跳过）：

   ```shell
   $ 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 中的说明。
 2. （可选）若此前已按上文使用 `--table-size=1000000` 完成过 Sysbench 测试，其测试数据会将最小规格部署的数据盘占满，需先重新创建 `test` 数据库以释放空间（该操作会删除库中所有数据表，包括 Sysbench 测试表及前文体验数据导入时创建的 `tbl2` 表）：

   ```shell
   $ obclient -h127.0.0.1 -uroot@oltp_tenant -P2881 -p -A -e "DROP DATABASE IF EXISTS test; CREATE DATABASE test;"

   ```
 3. 在部署用户环境下（同 `obd demo` 部署用户），执行以下命令一键发起 TPC-C 测试：

   ```shell
   $ obd test tpcc demo --tenant=oltp_tenant --warehouses=10 --run-mins=5

   ```

   | 参数 | 说明 |
   | --- | --- |
   | `demo` | 部署名，使用 `obd demo` 部署时固定为 `demo`。 |
   | `--tenant` | 测试租户名，需提前创建。 |
   | `--warehouses` | TPC-C 测试的仓库数。仓库数决定测试数据规模，默认为 10。如未指定，默认为集群 CPU 数 × 20。 |
   | `--run-mins` | 测试执行时间，单位：分钟。默认为 10 分钟。 |
   | `--load-workers` | 数据加载时的并发数。如未指定，默认取单机 CPU 数与租户可用内存（G）/2 中的较小值。 |
   | `--terminals` | 测试时的虚拟终端数。如未指定，默认取集群 CPU 数 × 15 与仓库数 × 10 中的较小值。 |

   #### 说明

   `obd test tpcc` 会自动完成所有操作，包括测试数据生成、参数调优、数据加载和压测执行。执行过程中会详细列出运行步骤和输出，数据量越大耗时越久。
 4. 查看测试结果。命令执行完成后，会输出 TPC-C 测试的关键指标：

   | 指标 | 说明 |
   | --- | --- |
   | **Measured tpmC (NewOrders)** | 每分钟处理的新订单数，是 TPC-C 测试的核心指标，数值越高表示系统的事务处理能力越强。 |
   | **Measured tpmTOTAL** | 每分钟处理的所有事务总数（含新订单、付款、订单状态、配送、库存查询五类事务）。 |
   | **Transaction Count** | 测试期间完成的事务总数。 |

   ```shell
   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 性能测试报告](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000749126)，该报告为 OceanBase 数据库 V4.2.3 版本在 3 节点 32C 128G 集群、1000 仓规格下的测试结果，测得 tpmC 达 30 万+。

#### 说明

如需使用 BenchmarkSQL 手动进行 TPC-C 测试（包括源码适配、建表、数据加载等完整步骤），请参见 [OceanBase 数据库 TPC-C 测试](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000749127)。

## 下一步

完成本文的 OLTP 压测体验后，您可以继续以下探索之旅：

1. **体验 HTAP 混合负载**：通过行存+列存表体验 OceanBase 数据库的 HTAP 能力，在同一张表上同时运行事务型和分析型查询。详见 [体验 HTAP 混合负载场景](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000007140971)。
 2. **体验多租户特性**：创建多个业务租户，体验资源隔离和弹性扩缩容能力。详见 [体验多租户与资源隔离](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000007140973)。
 3. **分布式集群压测**：如需体验 OceanBase 数据库的 Scalable OLTP 能力（多节点线性扩展），建议使用至少三节点的集群进行测试，并将租户的 `PRIMARY_ZONE` 设置为 `RANDOM`。详见 [OceanBase 数据库 TPC-C 测试](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000749127)。

## 相关文档

- 旁路导入的详细说明请参见 [旁路导入概述](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000006615117)。
 - LOAD DATA 语句的完整语法和更多示例请参见 [使用 LOAD DATA 语句导入数据](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000006627453)。
 - Sysbench 手动测试的完整步骤请参见 [OceanBase 数据库 Sysbench 测试](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000218151)。
 - TPC-C 手动测试的完整步骤请参见 [OceanBase 数据库 TPC-C 测试](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000749127)。
 - OBD 测试命令的详细参数请参见 [测试命令组](https://www.oceanbase.com/docs/common-obd-cn-1000000005150935)。
 - 多租户的创建和管理请参见 [体验多租户与资源隔离](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000007140973)。

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
