---
title: OceanBase 数据库 V4.2.1 版本中表级恢复恢复一张/组分区数较多的表恢复速度慢问题-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于OceanBase 数据库 V4.2.1 版本中表级恢复恢复一张/组分区数较多的表恢复速度慢问题相关的常见问题和使用技巧，帮助您快速解决OceanBase 数据库 V4.2.1 版本中表级恢复恢复一张/组分区数较多的表恢复速度慢问题的难题。
---
切换语言

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

划线反馈

# OceanBase 数据库 V4.2.1 版本中表级恢复恢复一张/组分区数较多的表恢复速度慢问题

更新时间：2026-05-19 09:51

适用版本： V4.2.x 内容类型：Troubleshoot  

## 问题现象

在 OceanBase 数据库 V4.2.1 版本中使用表级恢复功能恢复一张/组分区数较多的表，恢复过程组户级配置项 `ddl_thread_score` 设置得较小，表恢复速度较慢。 特别是数据量不大、分区数较多的表，表恢复速度较慢，不符合预期。

## 关键诊断信息

### 触发条件

OceanBase 数据库 V4.2.1 版本中使用表级恢复功能恢复一张/组分区数较多的表，恢复过程组户级配置项 `ddl_thread_score` 设置得较小。

### 事前巡检

在使用表级恢复一张/组分区数较多的表之前，可以通过以下命令查看 OBServer 节点上表级恢复的工作线程数：

```shell
show parameters like '%ddl_thread_score%' tenant=$tenant_name;

```

若 `ddl_thread_score` 设置的值较小，则需要通过以下命令增加工作线程数：

```shell
alter system set ddl_thread_score=INT tenant=$tenant_name;

```

### 事后诊断

诊断正在执行中的表级恢复任务：

1. 通过命令获取表级恢复每张表的导表任务，查看每张的表恢复时间。

   ```shell
   SELECT * FROM oceanbase.CDB_OB_IMPORT_TABLE_TASKS WHERE TENANT_ID = $tenant_id;

   ```

诊断已执行完成的表级恢复任务:

   ```shell
   SELECT * FROM CDB_OB_IMPORT_TABLE_TASK_HISTORY WHERE TENANT_ID = $tenant_id;

   ```

   观察每张表的恢复结果，观察到分区数多的表恢复速度比较慢，特别是数据量不大、分区数多的表恢复速度不符合预期。
 2. 通过命令查看 OBServer 节点上表级恢复的工作线程数，其中组户级配置项 `ddl_thread_score` 值设置的较小。

   ```

## 问题原因

在 OceanBase 数据库 V4.2.1 版本中使用表级恢复功能时遇到的性能问题主要由以下三个因素叠加导致：

1. 版本的恢复机制限制：多张表的恢复强制串行执行。

   当需要恢复多张表时，当前版本的恢复机制要求每张表的恢复任务按顺序依次执行，无法通过并行任务同时恢复多张表。
 2. 版本的恢复机制限制：分区恢复单线程模式。

   无论需要恢复的表是单分区还是多分区，当前版本的恢复机制每个分区的恢复任务均需要通过单线程顺序执行完成，无法对单分区的数据恢复任务进行线程级并行加速。
 3. 表级恢复工作线程数配置过低。

   当前版本的分区表的恢复理论上支持跨分区并行恢复（不同分区分配不同线程），但 OBServer 节点分配的表级恢复最大工作线程数量受限于租户级配置项 `ddl_thread_score`。若 `ddl_thread_score` 值设置过小，可用线程数不足，导致大量分区在排队等待线程资源。

## 问题的风险及影响

表级恢复恢复速度较慢。

## 影响租户

影响 OceanBase 数据库中的 SYS 租户和 Oracle 租户以及 MySQL 租户。

## 影响版本

OceanBase 数据库企业版 V4.2.1 GA（oceanbase-4.2.1.0-100000182023092722）及之后版本。

## 解决方法

1. 对于 OceanBase 数据库 V4.2.1 版本中使用表级恢复功能恢复一张/组分区数较多的表，恢复过程组户级配置项 `ddl_thread_score` 设置得较小，表恢复的速度较慢的场景。

   可以在表级恢复命令执行之前或者执行过程中，通过以下命令增加 OBServer 节点上表级恢复工作线程数，利用当前版本恢复分区表的支持跨分区并行恢复特点一定程度提升表级恢复性能，但多表不支持多表并行恢复。

      1. 减少表级恢复和物理恢复的调度等待时间。

        ```shell
        ALTER SYSTEM SET _restore_idle_time = '10s'; // 默认 60s

        ```
      2. 设置每个节点 DDL 补数据的 DAG 线程数量。

        ```shell
        ALTER SYSTEM SET ddl_thread_score=64 TENANT=$tenant_name; // 默认 0 使用内部值 2

        ```
      3. 完成表级恢复之后将 `_restore_idle_time` 修改回默认值。

        ```shell
        ALTER SYSTEM SET _restore_idle_time = '60s'; // 默认 60s

        ```
      4. 完成表级恢复之后将 `ddl_thread_score` 修改回默认值。

        ```shell
        ALTER SYSTEM SET ddl_thread_score=0 TENANT=$tenant_name; // 默认 0 使用内部值 2

        ```
 2. 对于其余场景，建议客户将 OceanBase 数据库版本升级到 V4.2.5 或 V4.3.5 BP1 版本：

   a. V4.2.5/V4.3.5 版本表级恢复，在现有的恢复分区表支持跨分区并行恢复的基础上，进一步支持了每个分区恢复的多线程模式、同时支持并行恢复多张表。

   b. V4.3.5 BP1 版本利用快速恢复优化了表级恢复，支持直接从备份介质上读取宏块数据。

   涉及 V4.2.5 之后的版本表级恢复的内容，详情参见：[表级恢复相关参数介绍](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001499861)。

#### 说明

1. `ddl_thread_score` 是租户级配置，设置后将一直生效。一般建议表级恢复执行结束之后，将 `ddl_thread_score` 恢复成默认值：`ALTER SYSTEM SET ddl_thread_score=INT TENANT=$tenant_name;`
 2. 表级恢复工作线程和 DDL 重整数据工作线程底层是同一组线程，线程数量受到组户级配置 `ddl_thread_score` 的控制， 两者会互相抢占线程资源影响任务的执行速度。

## 规避方式

建议客户在创建表时，采用分区表设计：通过利用当前版本恢复分区表的支持跨分区并行恢复特点，提升表级恢复的效率。

上一篇

[如何转换 SQL_AUDIT 表内的 request_time 时间](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000004753414)

下一篇

[历史合并信息 tablet_id 查询](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000004164905) ![有帮助](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) 咨询热线
