---
title: 主备集群间带宽使用达到 100%-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于 主备集群间带宽使用达到 100%相关的常见问题和使用技巧，帮助您快速解决 主备集群间带宽使用达到 100%的难题。
---
切换语言

- 简体中文
- English

划线反馈

# 主备集群间带宽使用达到 100%

更新时间：2026-05-09 07:56

适用版本： V3.2.x、V3.1.x、V2.2.x 内容类型：Troubleshoot  

## 适用版本

OceanBase 数据库 V4.0 之前的版本。

## 问题现象

在主集群为一个 7亿条记录的大表新建了一个索引，索引创建耗时 1.5 小时。此后，发现主备集群之间的带宽使用率大增，几乎将 400Mb 的带宽全部用完。

## 问题诊断

1. 从备集群的系统表 `__all_virtual_sys_task_status` 中查看正在执行的系统任务。

   ```shell
   obclient> select * from __all_virtual_sys_task_status;

   ```

   发现有 COPY_GLOBAL_INDEX_OP 的 migration task 在执行。
 2. 从备集群的系统表 `__all_rootservice_event_history` 中查看系统任务的历史信息。

   ```shell
   obclient> select * from __all_rootservice_event_history order by gmt_create desc limit 10;

   ```

   发现 migration task 在不停的失败重试。
 3. 使用 task_id 在日志中查看 migration task 失败的原因，发现有网络传输的错误。

   ```
   [2023-06-14 18:06:40.605390] WARN  [SERVER] send_session (ob_req_transport.cpp:303) [5191][464][YB42C2007220-0005FC2001AFCA2E] [lt=37] [dc=0] send packet fail(dst="xx.xx.xx.xx:2882", s=0x7fe28e2d2790)

   [2023-06-14 18:06:40.605414] WARN  [RPC.FRAME] send (ob_req_transport.h:269) [5191][464][YB42C2007220-0005FC2001AFCA2E] [lt=9] [dc=0] send packet fail due to session timeout. It may be caused by tenant queue being full or deadlock in RPC server side, or someting else. Please look into it in the log of server side(easy_error=-47, req={pkt:{hdr_:{checksum_:855592653, pcode_:1137, hlen_:0, priority_:5, flags_:6151, tenant_id_:509, priv_tenant_id_:0, session_id_:0, trace_id_:12381350556192, timeout_:9000000, timestamp:1686737191605228, dst_cluster_id:1630659931, cost_time:{len:0, arrival_push_diff:0, push_pop_diff:0, pop_process_start_diff:0, process_start_end_diff:0, process_end_response_diff:0, packet_id:195102496592092, request_arrival_time:0}, compressor_type_:0, original_len_:0, src_cluster_id_:1630659932, seq_no_:0}, chid_:2977027841, clen_:2773, assemble:false, msg_count:0, payload:0}}, ret=-4012)

   ```

## 问题原因

主集群新建索引后，备集群需要 copy 主集群的副本，执行副本 rebuild 的操作。副本 rebuild 时一台 OBServer 上 copy 宏块的并发线程数（migrate_concurrency）默认为10，而主备集群间的带宽不足以支撑10个并发任务，导致带宽被用完，从而导致任务失败、重试，导致带宽的使用保持在高位。

## 解决方法

根据最佳实践，当跨机房带宽在 100MB（800Mb）时，需要将备集群的相关 dag 任务的并发度调整为：

- server_data_copy_out_concurrency = 1
 - server_data_copy_in_concurrency = 1
 - migrate_concurrency =1

修改参数后，备集群从主集群 copy 副本时只有 1 个同步任务且每次只拉取1个宏块，复制任务对带宽的使用稳定在 2MB/s 以下。

## 更多信息

**备集群索引同步**

1. 主集群新建索引后，备集群首先同步索引的 schema 信息，在系统表 `__all_ddl_helper` 中记录备集群同步、创建索引的信息。
 2. 后台任务进行索引副本的复制。
 3. 当同步完成后，更新 `__all_vitaual_table` 中索引表的 `index_status=2`，并清空 `__all_ddl_helper` 中的信息。

**主备集群同步延迟**

主备集群的同步延迟只统计数据 base 表的同步差异，不统计索引的同步差异。因此，即使备集群的索引迟迟无法同步，OceanBase 数据库也不会提示主备集群存在同步延迟。

**主备集群带宽**

维持主备集群间正常同步所需要带宽大致可以分为如下 3 个部分：

1. 主备集群之间的内部通信，包括心跳检测，集群状态交互，schema_version 的检测对比等，产品目前最低保障稳定运行需求是 50Mbps。
 2. 实时增量数据的 clog 日志，可通过业务 `TPS * 每个事务读写数据量 * 4` 来预估。
 3. 突发的 standy_resotre、sstable 宏块的物理同步，可通过调整 data copy 和 migrate_concurrency 的并发度来控制带宽的使用。

**对主备库间带宽的进行限速**

1. 开启 clog 传输压缩。

   ```shell
   obclient> alter system set clog_transport_compress_all = 'true';

   ```
 2. 调整 data copy 和 migrate_concurrency 的并发度。
 3. 调整 sys_bkgd_net_percentage 来控制后台线程的带宽的使用，默认是网卡的 60% 带宽，可以根据情况适当调低。
 4. 网卡限速，调整 `/sys/class/net/bond0/speed` 文件中的数字（10000 表示 10Gb）。

Previous

[OceanBase 数据库主备库带宽估算](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000208212)

Next

[备集群中存在无法同步的租户](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000208210) ![有帮助](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) 咨询热线
