---
title: github-fill
description: io_adapter_benchmark io_adapter_benchmark 命令用于验证 OBServer 节点到备份介质的读写性能。本文主要介绍 io_adapter_benchmark 命令的几种用法。 命令介绍 您可在 io_adapter_benchmark 命令中配置 -h 输出命令的使用介绍。 .…
---
切换语言

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

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

# io_adapter_benchmark

更新时间：2024-11-26 23:00:00

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.3.4/zh-CN/700.reference/1500.Components-and-Tools/100.manage/200.ob-admin/400.backup-and-recovery/800.io-adapter-benchmark.md)  

io_adapter_benchmark 命令用于验证 OBServer 节点到备份介质的读写性能。本文主要介绍 io_adapter_benchmark 命令的几种用法。

## 命令介绍

您可在 io_adapter_benchmark 命令中配置 `-h` 输出命令的使用介绍。

```shell
./ob_admin io_adapter_benchmark -h

```

输出如下：

```shell
Usage: io_adapter_benchmark command [command args] [options]
commands:
    -h, --help                    display this message.
options:
    -d  测试目录
    -s  对象存储校验信息
    -t  并发线程数
    -r  单个线程执行任务的次数
    -l  总的运行时间限制
    -o  对象大小
    -n  对象数量
    -f  对于read操作，-f选项指定单次读取的数据大小；对于append/multipart write操作，-f选项指定单次写入的数据大小
    -p  任务类型
    -j  该参数用于表明备份介质目录类型，由于备份介质S3/OBS的目录结构有变更，所以某些操作需要指明备份介质类型
    -b  在执行任务前是否清理目录，-b 'true'表示清理目录，不设置该参数表示不清理
    -c  在任务完成后是否清理目录，-c 'true'表示清理目录，不设置该参数表示不清理

```

其中，任务类型（`-p`）有如下几种取值：

- `write`：表示写普通文件，每个线程会在一个单独的目录下写入。
 - `append`：表示追加写文件。
 - `multi`：表示分片上传。
 - `read`：表示读取文件，必须先写入数据才可以执行 read 任务。
 - `del`：表示删除数据，每个线程删除一个单独目录下的数据，设置的线程数需等于写入时设置的线程数。

## 示例

### 写普通文件

```shell
./ob_admin io_adapter_benchmark -d 'oss://oss_bucket/test_path' \
                              -s 'host=xxx.com&access_id=111&access_key=222' \
                              -o 100 \  # 对象大小设置为 100 字节
                              -t 4   \  # 4 线程并行
                              -r 10  \  # 单个线程写入的对象数量上限为 10 个
                              -j 100 \  # 执行的时间上限为 100s
                              -p 'write' \
                              -b 'true'   \  # 写入前清理目录，可选
                              -c 'true'   \  # 执行完成后清理目录，可选

```

上述命令会在 `oss_bucket/test_path` 目录下执行写普通文件的性能测试，并在真正写入前清空 test_path 目录（`-b 'true'` 指定）。清空目录后，将通过四个线程（`-t 4` 指定）并发向该目录写入对象，每个对象大小为 100 字节（`-o 100` 指定），直到每个线程写入 10 个对象（`-r 10` 指定）或执行的总时间达到上限（100s，`-j 100` 指定）后停止写入。测试完成后会清空目录（`-c 'true'` 指定）。

命令执行后输出如下：

```shell
succ to open, filename=/tmp/ob_admin.log, fd=3, wf_fd=2
succ to open, filename=/tmp/ob_admin_rs.log, fd=4, wf_fd=2
|                   Task Config|{thread_num:4, max_task_runs:100, time_limit_s:-1, obj_size:2097152, obj_num:-1, fragment_size:-1, is_adaptive:false, type:0}
------------------------------{Testing}------------------------------
|                        Status|SUCCESS
|           Total operation num|400
|          Total execution time|16.373251 s
|               Total user time|6.110431 s
|             Total system time|0.410841 s
|      CPU usage for 100MB/s BW|81.515900% per 100MB/s
|        Total throughput bytes|838860800
|                     Total QPS|24.430090
|                Per Thread QPS|6.107523
|                      Total BW|48.860181 MB/s
|                 Per Thread BW|12.215045 MB/s
|             Total Op Time Map|total_entry=400, min_ms=99, th_50_ms=113, th_90_ms=253, th_99_ms=400, th_999_ms=452, max_ms=928
|                 Open Time Map|Empty Time Map
|             Close Op Time Map|Empty Time Map

```

### 追加写文件

```shell
./ob_admin io_adapter_benchmark -d 'oss://home/admin/backup_info' \
                              -s 'host=xxx.com&access_id=111&access_key=222' \
                              -o 100 \  # 对象大小设置为 100 字节
                              -t 4   \  # 4 线程并行
                              -r 10  \  # 单个线程写入的对象数量上限为 10 个
                              -p 'append' \
                              -f 10  \ # 写入一个对象时，每次 append 10 字节，即 append 10 次后完成一个对象（此例中为 100 字节）的写入

```

```shell
succ to open, filename=/tmp/ob_admin.log, fd=3, wf_fd=2
succ to open, filename=/tmp/ob_admin_rs.log, fd=4, wf_fd=2
|                   Task Config|{thread_num:4, max_task_runs:10, time_limit_s:-1, obj_size:2097152, obj_num:-1, fragment_size:1048576, is_adaptive:false, type:1}
------------------------------{Testing}------------------------------
|                        Status|SUCCESS
|           Total operation num|40
|          Total execution time|5.685847 s
|               Total user time|0.776306 s
|             Total system time|0.073172 s
|      CPU usage for 100MB/s BW|106.184750% per 100MB/s
|        Total throughput bytes|83886080
|                     Total QPS|7.035012
|                Per Thread QPS|1.758753
|                      Total BW|14.070023 MB/s
|                 Per Thread BW|3.517506 MB/s
|             Total Op Time Map|total_entry=40, min_ms=364, th_50_ms=419, th_90_ms=704, th_99_ms=754, th_999_ms=754, max_ms=963
|                 Open Time Map|total_entry=40, min_ms=0, th_50_ms=3, th_90_ms=3, th_99_ms=3, th_999_ms=3, max_ms=3
|             Close Op Time Map|total_entry=40, min_ms=103, th_50_ms=112, th_90_ms=123, th_99_ms=124, th_999_ms=124, max_ms=125

```

### 分片上传

```shell
./ob_admin io_adapter_benchmark -d 'oss://home/admin/backup_info' \
                              -s 'host=xxx.com&access_id=111&access_key=222' \
                              -o 100 \  # 对象大小设置为 100 字节
                              -t 4   \  # 4 线程并行
                              -r 10  \  # 单个线程写入的对象数量上限为 10 个
                              -p 'multi' \
                              -f 10  \  # 单次写入的大小为 10 字节，相当于一个对象（此例中为 100 字节）包含 10 次写入操作

```

对于目前对象存储的分片上传实现来说，每个 part 聚合到 8MB 后才会真正写入一个分片，即写入次数不等于 part 数。

```shell
succ to open, filename=/tmp/ob_admin.log, fd=3, wf_fd=2
succ to open, filename=/tmp/ob_admin_rs.log, fd=4, wf_fd=2
|                   Task Config|{thread_num:4, max_task_runs:10, time_limit_s:-1, obj_size:2097152, obj_num:-1, fragment_size:1048576, is_adaptive:false, type:2}
------------------------------{Testing}------------------------------
|                        Status|SUCCESS
|           Total operation num|40
|          Total execution time|7.135682 s
|               Total user time|0.765570 s
|             Total system time|0.095029 s
|      CPU usage for 100MB/s BW|107.574875% per 100MB/s
|        Total throughput bytes|83886080
|                     Total QPS|5.605631
|                Per Thread QPS|1.401408
|                      Total BW|11.211262 MB/s
|                 Per Thread BW|2.802815 MB/s
|             Total Op Time Map|total_entry=40, min_ms=314, th_50_ms=411, th_90_ms=762, th_99_ms=833, th_999_ms=833, max_ms=1002
|                 Open Time Map|total_entry=40, min_ms=43, th_50_ms=50, th_90_ms=57, th_99_ms=99, th_999_ms=99, max_ms=102
|             Close Op Time Map|total_entry=40, min_ms=269, th_50_ms=357, th_90_ms=708, th_99_ms=781, th_999_ms=781, max_ms=900

```

### 读取文件

```shell
ob_admin io_adapter_benchmark -d 'oss://home/admin/backup_info' \
                              -s 'host=xxx.com&access_id=111&access_key=222' \
                              -o 100  \  # 对象大小设置为 100 字节
                              -t 4    \  # 4 线程并行
                              -r 10   \  # 单个线程执行的 read 操作上限为 10 个
                              -p 'read' \
                              -f 10   \  # 单次 read 操作的读取数据大小，表示随机读取 10 字节数据
                                      \   # 如果需要读取完整对象，可以设置 -f'obj_size'
                              -j 1    \  # 如果备份目录是 S3/OBS 格式，需要设置 -j'1'
                              -n 10  \  # 数据写入时，单个线程写入的对象数为 10

```

执行如上命令时需注意，必须先写入数据才能执行读取任务，使用 `-n` 选项指定之前每个线程已写入的对象数（写入任务命令中 `-r` 对应数值），并行数（`-t`）不能大于写入数据时指定的并行数。

#### 说明

若已执行多个写入命令，以读取命令中 `-d` 指定的对应目录下最近的写入命令为准，即 `-n` 和 `-r` 都需要参照对应命令进行设置。

```shell
succ to open, filename=/tmp/ob_admin.log, fd=3, wf_fd=2
succ to open, filename=/tmp/ob_admin_rs.log, fd=4, wf_fd=2
|                   Task Config|{thread_num:4, max_task_runs:20, time_limit_s:-1, obj_size:2097152, obj_num:10, fragment_size:1048576, is_adaptive:true, type:3}
------------------------------{Testing}------------------------------
|                        Status|SUCCESS
|           Total operation num|80
|          Total execution time|2.970364 s
|               Total user time|0.289431 s
|             Total system time|0.217354 s
|      CPU usage for 100MB/s BW|63.348125% per 100MB/s
|        Total throughput bytes|83886080
|                     Total QPS|26.932726
|                Per Thread QPS|6.733182
|                      Total BW|26.932726 MB/s
|                 Per Thread BW|6.733182 MB/s
|             Total Op Time Map|total_entry=80, min_ms=114, th_50_ms=132, th_90_ms=164, th_99_ms=356, th_999_ms=356, max_ms=389
|                 Open Time Map|Empty Time Map
|             Close Op Time Map|Empty Time Map

```

### 删除数据

```shell
ob_admin io_adapter_benchmark -d 'oss://home/admin/backup_info' \
                              -s 'host=xxx.com&access_id=111&access_key=222' \
                              -t 4     \  # 4 线程并行
                              -p 'del' \
                              -j 1     \ # 如果备份目录是 S3/OBS 格式，需要设置 -j '1'
                              -r 10    \ # 必须等于写入时指定的写入数量

```

执行如上命令时需注意，每个线程删除一个单独目录下的数据，所以设置的线程数（`-t`）需要等于写入时设置的并行数。

#### 说明

若已执行多个写入命令，以读取命令中 `-d` 指定的对应目录下最近的写入命令为准，即 `-t` 和 `-r` 都需要参照对应命令进行设置。

```shell
succ to open, filename=/tmp/ob_admin.log, fd=3, wf_fd=2
succ to open, filename=/tmp/ob_admin_rs.log, fd=4, wf_fd=2
|                   Task Config|{thread_num:4, max_task_runs:20, time_limit_s:-1, obj_size:-1, obj_num:-1, fragment_size:-1, is_adaptive:true, type:4}
------------------------------{Testing}------------------------------
|                        Status|SUCCESS
|           Total operation num|80
|          Total execution time|2.136603 s
|               Total user time|0.155563 s
|             Total system time|0.014127 s
|               Total CPU usage|7.942046%
|        Total throughput bytes|0
|                     Total QPS|37.442613
|                Per Thread QPS|9.360653
|                      Total BW|0.000000 MB/s
|                 Per Thread BW|0.000000 MB/s
|             Total Op Time Map|total_entry=80, min_ms=77, th_50_ms=94, th_90_ms=105, th_99_ms=159, th_999_ms=159, max_ms=166
|                 Open Time Map|Empty Time Map
|             Close Op Time Map|Empty Time Map

```

 上一篇 下一篇 ![有帮助](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) 咨询热线
