---
title: "LOB 类型 - OceanBase 数据库 V4.6.0 | OceanBase 文档中心"
description: LOB 类型 LOB 类型是用于存储 TEXT、BLOB、JSON、Geometry 等数据类型。 LOB 的存储的方式分为内联存储（INROW）和外联存储（OUTROW）两种。 内联存储 内联存储是将 LOB 数据与主表行存储在一起，在读取 LOB 数据时只需要进行一次存储访问操作。 外联存储 外联存储是将 LOB…
---
切换语言

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

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

# LOB 类型

更新时间：2026-06-21 12:52:21

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.6.0/zh-CN/700.reference/500.sql-reference/100.sql-syntax/200.common-tenant-of-mysql-mode/100.basic-elements-of-mysql-mode/100.data-type-of-mysql-mode/500.large-object-of-mysql-mode/400.lob-type-of-mysql-mode.md)  

`LOB` 类型是用于存储 TEXT、BLOB、JSON、Geometry 等数据类型。 `LOB` 的存储的方式分为内联存储（INROW）和外联存储（OUTROW）两种。

## 内联存储

内联存储是将 LOB 数据与主表行存储在一起，在读取 LOB 数据时只需要进行一次存储访问操作。

## 外联存储

外联存储是将 LOB 数据存储在 LOB 辅助表中，在读取 LOB 数据时需要读取主表行，获取外联 LOB 的定位符（locator），之后根据定位符信息去 LOB 辅助表中读取实际的 LOB 数据，在这个过程中需要进行两次存储访问操作。

## LOB 存储转换

LOB 数据的存储是内联存储还是外联存储，取决于 LOB 列的数据量。假如设定一个阈值为 8192 字节，如果超过 8192 字节 则为外联存储，否则为内联存储。

```shell
obclient> CREATE TABLE t(pk int, data text) LOB_INROW_THRESHOLD = 8192;

```

上述 DDL 指定了表中 LOB 列的 INROW 转 OUTROW 阈值为 8192 字节，其中 `LOB_INROW_THRESHOLD` 表示 LOB 列的阈值。

- 当 LOB 列的数据小于等于 8192 字节时，LOB 数据和主表行存储在一起。
 - 当 LOB 列的数据大于 8192 字节时，会将所有数据存储到 LOB 辅助表中。

#### 说明

`lob_inrow_threshold`的值从大改小需要触发 Offline DDL。

内联存储相对于外联存储具有更好的性能表现，它能够减少存储访问次数，提高读取 LOB 数据的效率。特别是在需要频繁访问 LOB 数据的场景下，选择内联存储能够加快查询速度并降低系统开销。

## LOB 类型

在 MySQL 模式下，常见的 LOB 类型按字母顺序排列如下：

- **ARRAY**：用于存储数组数据类型，允许存储多个值的集合。
 - **Roaringbitmap**：用于存储位图数据，主要用于图像处理和表示。
 - **BLOB**（Binary Large Object）：用于存储二进制数据，如图像或文件，最大长度为 65,535 字节。
 - **GEOMETRY**：用于存储地理空间数据，支持空间分析和操作。
 - **JSON**：用于存储 JSON 格式的数据，便于处理结构化数据。
 - **LONGTEXT**：用于存储大量的文本数据，最大长度为 536,870,910 字节。
 - **LONGBLOB**：用于存储大量的二进制数据，最大长度为 536,870,910 字节。
 - **MEDIUMBLOB**：用于存储中等量的二进制数据，最大长度为 16,777,215 字节。
 - **MEDIUMTEXT**：用于存储中等量的文本数据，最大长度为 16,777,215 字节。
 - **TEXT**：用于存储较少量的文本数据，最大长度为 65,535 字节。

## LOB 一致性校验

外联存储时，主表与 LOB 辅助表通过 LOB ID 关联：主表定位符中的 LOB ID 集合，应与 LOB 辅助表中出现的 LOB ID 集合一致。若出现“主表有而辅助表无”或“辅助表有而主表无”等不一致，可能导致读取异常或空间无法回收等问题。

该功能通过 LOB 校验任务（LOB Task）扫描主表收集 LOB ID 集合，并与 LOB 辅助表扫描得到的 LOB ID 集合做对比，输出是否一致及差异信息，便于在低峰期巡检或在故障排查时确认数据关系是否正常。

#### 注意

校验会扫描主表与 LOB 辅助表相关数据，对 I/O 与 CPU 有一定开销，请在业务低峰期执行，并结合下文为任务配置合适的资源组。

### 与资源组及 I/O 基准配合使用说明

LOB 一致性校验会扫描主表与 LOB 辅助表，I/O 与 CPU 开销较大。对校验任务做 I/O 上限等限额时，依赖租户侧磁盘 I/O 基准（由 I/O 校准产生）。不同部署形态下建议如下：

- 公有云等已默认完成 I/O 校准的环境：通常可直接在租户内配置资源管理计划与资源组。
 - 私有云或未做过 I/O 校准的环境：需先在系统租户完成磁盘 I/O 校准，再根据基准为业务租户规划 Unit 的 `MAX_IOPS` / `MIN_IOPS`，并与资源组中的 I/O 限额配合。校准命令、进度查看及与后台任务资源隔离的关系，请参见 [后台任务的资源隔离](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005682926)；磁盘性能校准步骤另见 [磁盘性能校准](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005685795)。

### 完整示例

使用一致性校验功能时，需要先进行 I/O 校准，然后创建 LOB 校验专用资源计划，并配置资源管理计划与资源组。

#### 第一步：I/O 校准（可选）

如果未做过 I/O 校准，需要先在系统租户执行 I/O 校准，校准完成到生效可能需要 1-2 分钟。

#### 注意

此部分命令需在系统租户执行。

```sql
ALTER SYSTEM RUN JOB 'io_calibration';

```

校准完成后，可通过 [GV$OB_IO_CALIBRATION_STATUS](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005684319) 查看校准任务状态，通过 [GV$OB_IO_BENCHMARK](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005684406) 查看各节点基准 IOPS。为租户配置 Unit IOPS 时，建议在基准（例如 16 KB 读对应 IOPS）基础上预留约 10% 余量，避免磁盘打满影响在线业务延迟。

```sql
-- 查看校准进度
SELECT * FROM GV$OB_IO_CALIBRATION_STATUS;
-- 查询校准值
SELECT * FROM GV$OB_IO_BENCHMARK;

```

为租户配置 Unit 层面的 IOPS 时，建议参考 `GV$OB_IO_BENCHMARK` 查询到的 IOPS 基准值，在此基础上预留约 10% 的余量（即以 16K 对应 IOPS 的 90% 作为设置值），以避免磁盘资源充分利用时达到瓶颈，从而保障前台 SQL 的响应时间不会受到影响。

#### 第二步：创建 LOB 校验专用资源计划

在需运行校验的业务租户内，可单独建一套资源计划，将 LOB 校验相关后台任务映射到专用资源组并限制 CPU、IOPS。以下示例计划名为 `LOB_CHECK`，资源组名为 `LOB_CHECK`，通过 `FUNCTION` 映射将取值 `LOB_CHECK` 的后台任务划入该组；`MGMT_P1`、`UTILIZATION_LIMIT`、`MAX_IOPS`、`MIN_IOPS`、`WEIGHT_IOPS` 等请按实际规格调整。

`DBMS_RESOURCE_MANAGER` 各子程序语法与参数说明参见 [DBMS_RESOURCE_MANAGER 概述](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005686436)。

```sql
CALL DBMS_RESOURCE_MANAGER.CREATE_PLAN('LOB_CHECK', 'plan for lob_check');

CALL DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP( CONSUMER_GROUP => 'LOB_CHECK', COMMENT => 'LOB_CHECK');

CALL DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
  PLAN => 'LOB_CHECK',
  GROUP_OR_SUBPLAN => 'LOB_CHECK',
  COMMENT => 'LOB_CHECK_GROUP',
  MGMT_P1 => 30,
  UTILIZATION_LIMIT => 30,
  MAX_IOPS => 20,
  MIN_IOPS => 0,
  WEIGHT_IOPS => 20);

CALL DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'LOB_CHECK', 'LOB_CHECK');

```

激活资源管理计划后，上述映射与限额才会对会话及后台任务生效：

```sql
SET GLOBAL resource_manager_plan = 'LOB_CHECK';

```

`resource_manager_plan` 的含义与注意事项参见 [resource_manager_plan](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005685210)。

#### 第三步：配置定时任务（可选）

#### 注意

此部分命令需在业务租户下执行。

如果需要定期执行 LOB 一致性校验，可以创建定时任务。

1. 开启任务：默认关闭，需要手动开启，默认触发时间为每周日凌晨 4 点。

   ```sql
   CALL DBMS_SCHEDULER.ENABLE('lob_check_job');

   ```
 2. 停止定时任务

   ```sql
   CALL DBMS_SCHEDULER.DISABLE('lob_check_job');

   ```
 3. 修改定时任务的触发周期和开始时间

   ```sql
   CALL DBMS_SCHEDULER.ENABLE('lob_check_job');
   CALL DBMS_LOB_MANAGER.RESCHEDULE_JOB('2025-12-01 17:48:00', 'FREQ=DAYLY; INTERVAL=1');

   ```

   查看定时任务的详细信息：

   ```sql
   SELECT * FROM DBA_SCHEDULER_JOBS WHERE job_name='lob_check_job';

   ```

   返回结果示例如下：

   ```shell
   *************************** 1. row ***************************
                           OWNER: SYS
                       JOB_NAME: lob_check_job
                     JOB_SUBNAME: NULL
                       JOB_STYLE: REGULAR
                     JOB_CREATOR: NULL
                       CLIENT_ID: NULL
                     GLOBAL_UID: NULL
                   PROGRAM_OWNER: SYS
                   PROGRAM_NAME: NULL
                       JOB_TYPE: PLSQL_BLOCK
                     JOB_ACTION: DBMS_LOB_MANAGER.CHECK_LOB_INNER()
             NUMBER_OF_ARGUMENTS: NULL
                 SCHEDULE_OWNER: NULL
                   SCHEDULE_NAME: NULL
                   SCHEDULE_TYPE: NULL
                     START_DATE: 2025-12-01 17:48:00.000000 +08:00
                 REPEAT_INTERVAL: FREQ=DAYLY; INTERVAL=1
               EVENT_QUEUE_OWNER: NULL
               EVENT_QUEUE_NAME: NULL
               EVENT_QUEUE_AGENT: NULL
                 EVENT_CONDITION: NULL
                     EVENT_RULE: NULL
             FILE_WATCHER_OWNER: NULL
               FILE_WATCHER_NAME: NULL
                       END_DATE: 4000-01-01 00:00:00.000000 +08:00
                       JOB_CLASS: DEFAULT_JOB_CLASS
                         ENABLED: 1
                       AUTO_DROP: 0
             RESTART_ON_RECOVERY: NULL
             RESTART_ON_FAILURE: NULL
                           STATE: NULL
                   JOB_PRIORITY: NULL
                       RUN_COUNT: NULL
                       MAX_RUNS: NULL
                   FAILURE_COUNT: 0
                   MAX_FAILURES: NULL
                     RETRY_COUNT: NULL
                 LAST_START_DATE: NULL
               LAST_RUN_DURATION: +000000000 02:00:00.000000
                   NEXT_RUN_DATE: 2025-12-23 17:48:00.000000 +08:00
                 SCHEDULE_LIMIT: NULL
               MAX_RUN_DURATION: +000 02:00:00
                   LOGGING_LEVEL: NULL
                   STORE_OUTPUT: NULL
           STOP_ON_WINDOW_CLOSE: NULL
             INSTANCE_STICKINESS: NULL
                   RAISE_EVENTS: NULL
                         SYSTEM: NULL
                     JOB_WEIGHT: NULL
                         NLS_ENV: NULL
                         SOURCE: NULL
         NUMBER_OF_DESTINATIONS: NULL
               DESTINATION_OWNER: NULL
                     DESTINATION: NULL
               CREDENTIAL_OWNER: NULL
                 CREDENTIAL_NAME: NULL
                     INSTANCE_ID: NULL
                   DEFERRED_DROP: NULL
   ALLOW_RUNS_IN_RESTRICTED_MODE: NULL
                       COMMENTS: LOB consistency check job, runs weekly to check LOB data consistency
                           FLAGS: 0
                     RESTARTABLE: NULL
       CONNECT_CREDENTIAL_OWNER: NULL
         CONNECT_CREDENTIAL_NAME: NULL
   1 row in set

   ```

   任务触发后，若要查看 LOB 校验任务进度，可查询 `oceanbase.DBA_OB_LOB_CHECK_TASKS` 视图，示例如下。

   ```sql
   SELECT * FROM DBA_OB_LOB_CHECK_TASKS;

   ```

   返回结果示例如下：

   ```shell
   +-------+-------------+----------+-----------+---------+---------------------+---------------------+--------------+------------+----------+------------------+------------+-------------+------------+-----------+-------------+
   | LS_ID | TABLE_NAME  | TABLE_ID | TABLET_ID | TASK_ID | START_TIME          | END_TIME            | TRIGGER_TYPE | STATUS     | MISS_CNT | MISMATCH_LEN_CNT | ORPHAN_CNT | CORRECT_CNT | RET_CODE   | TASK_TYPE | SCAN_INDEX  |
   +-------+-------------+----------+-----------+---------+---------------------+---------------------+--------------+------------+----------+------------------+------------+-------------+------------+-----------+-------------+
   |    -1 | NULL        |       -3 |        -3 |       1 | 2025-12-23 17:48:00 | 2025-12-23 17:48:00 | PERIODIC     | TRIGGERING |        0 |                0 |          0 |           0 | OB_SUCCESS | LOB_CHECK | PRIMARY KEY |
   |     1 | __all_table |        3 |         3 |       1 | 2025-12-23 17:48:02 | 2025-12-23 17:48:02 | PERIODIC     | PREPARED   |        0 |                0 |          0 |           0 | OB_SUCCESS | LOB_CHECK | PRIMARY KEY |
   +-------+-------------+----------+-----------+---------+---------------------+---------------------+--------------+------------+----------+------------------+------------+-------------+------------+-----------+-------------+
   2 rows in set

   ```

   使用 `DBMS_LOB_MANAGER.RESCHEDULE_JOB` 修改调度后，可通过 `DBA_SCHEDULER_JOBS` 查看 `NEXT_RUN_DATE` 等字段。

#### 第四步：执行 LOB 一致性校验

1. 手动触发 LOB 一致性校验

   ```sql
   -- 触发该租户所有有lob辅助表的一致性校验
   CALL DBMS_LOB_MANAGER.CHECK_LOB();
   -- 触发该租户table_id在该数组内的表的lob一致性校验
   CALL DBMS_LOB_MANAGER.CHECK_LOB('[500001, 500003]');

   ```
 2. 取消当前任务

   ```sql
   CALL DBMS_LOB_MANAGER.CANCEL_JOB("check_lob");

   ```
 3. 暂停任务

   ```sql
   CALL DBMS_LOB_MANAGER.SUSPEND_JOB("check_lob");

   ```
 4. 继续任务

   ```sql
   CALL DBMS_LOB_MANAGER.RESUME_JOB("check_lob");

   ```
 5. 修改定时任务触发周期和开始时间

   ```sql
   CALL DBMS_LOB_MANAGER.RESCHEDULE_JOB('2025-12-01 17:48:00', 'FREQ=DAYLY; INTERVAL=1');

   ```

#### 第五步：查看 LOB 一致性校验结果

通过视图 `DBA_OB_LOB_CHECK_TASKS` 查看当前 LOB 任务的进度，通过 `DBA_OB_LOB_CHECK_EXCEPTION_RESULT` 查看异常结果。

```sql
SELECT * FROM DBA_OB_LOB_CHECK_TASKS;
SELECT * FROM DBA_OB_LOB_CHECK_EXCEPTION_RESULT;

```

## 相关文档

- [位图函数概述](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005687384)
 - [BLOB](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005688077)
 - [空间数据类型概述](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005688092)
 - [JSON](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005688110)
 - [TEXT](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005688080)

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