---
title: "备副本延迟阈值 - 数据库代理  V4.3.2 | OceanBase 文档中心"
description: 备副本延迟阈值 背景介绍 ODP 在转发弱读请求时，可能出现将弱读请求转发到备副本的情况，尤其是在读写分离的部署场景下，ODP 会优先将弱读请求转发到备副本。备副本所保存的数据和主副本的最新数据存在一定的延迟，弱读请求读取备副本的数据时读到的可能不是最新数据。 短时间的延迟在弱读的场景下一般是可以接受的，但是也会出现…
---
切换语言

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

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*nSAhQbrBXKwAAAAAAAAAAAAADiGDAQ/original) 数据库代理 V 4.3.2

# 备副本延迟阈值

更新时间：2026-04-14 17:41:09

[编辑](https://github.com/oceanbase/oceanbase-proxy-doc/edit/V4.3.2/zh-CN/600.data-routing/600.follower-latency-threshold.md)  

## 背景介绍

ODP 在转发弱读请求时，可能出现将弱读请求转发到备副本的情况，尤其是在读写分离的部署场景下，ODP 会优先将弱读请求转发到备副本。备副本所保存的数据和主副本的最新数据存在一定的延迟，弱读请求读取备副本的数据时读到的可能不是最新数据。

短时间的延迟在弱读的场景下一般是可以接受的，但是也会出现部分场景：延迟时间变长，实际的业务难以接受延迟时间过长的数据。比如下图场景中，备副本读到的数据的延迟时间超出客户端的预期，并且客户端难以感知和控制弱读数据的延迟时间。

![图一](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/odp/V4.2.1/zh-CN/600.data-routing/8.png)

针对该类场景，ODP 和 OceanBase 数据库提供了备副本延迟阈值的功能。

## 功能介绍

备副本延迟阈值功能即提供控制弱读数据最大延迟时间的能力，通过 OBServer 节点超时反馈，ODP 将超出延迟阈值的弱读请求转发到其他 OBServer 节点。

例如在上述场景，OBServer1 节点的延迟时间超出客户端的预期，当弱读请求被转发到 OBServer1 节点后，OBServer1 节点发出超时反馈，ODP 会将该弱读请求二次路由到 OBServer3 节点。展现结果如下图所示。

![图二](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/odp/V4.2.1/zh-CN/600.data-routing/9.png)

## 注意事项

您需通过设置 ODP 的相关配置来调整备副本延迟阈值的功能，需重点关注的配置有如下几个：

1. read_stale_retry_interval：ODP 中的配置项，用来控制副本的延迟洗白时间，即清洗数据分区延迟副本的延迟标记时间，默认值为 5s。
 2. ob_max_read_stale_time：ODP 中的配置项，用来控制弱读请求数据允许的最大延迟时间，单位为微秒。默认值为 -1，即该功能处于默认关闭的状态。因为 OceanBase 数据库通过弱一致性读版本号来感知数据的延迟时间，因此该参数不能低于 OceanBase 数据库的弱一致性读版本号的刷新周期 weak_read_version_refresh_interval。
 3. weak_read_version_refresh_interval：OceanBase 数据库中参数，用来控制弱一致性读版本号的刷新周期。在 OceanBase 数据库 V4.0.0 及之后版本中默认值为 100ms，在 OceanBase 数据库 V4.0.0 之前版本中默认值为 50ms。具体介绍可参见 OceanBase 数据库文档 [weak_read_version_refresh_interval](https://www.oceanbase.com/docs/common-oceanbase-database-1000000000035314)。

#### 说明

- 该功能依赖 OceanBase 的 2.0 协议。
 - 当某一数据分区在所有的备副本节点都延迟之后，ODP 会将访问该数据副本的请求转发到主副本。

### 使用示例

1. 查询 OceanBase 数据库的 weak_read_version_refresh_interval，确保设置的 ob_max_read_stale_time 不低于该值。

   ```sql
   obclient> show parameters like 'weak_read_version_refresh_interval';
   | zone  | svr_type | svr_ip        | svr_port | name                               | data_type | value | info                                                                       | section  | scope   | source  | edit_level        |
   +-------+----------+-------------+----------+------------------------------------+-----------+-------+----------------------------------------------------------------------------+----------+---------+---------+-------------------+
   | zone1 | observer | 10.10.10.1  |     2882 | weak_read_version_refresh_interval | NULL      | 100ms | the time interval to refresh cluster weak read version Range: [50ms, +∞)   | OBSERVER | CLUSTER | DEFAULT | DYNAMIC_EFFECTIVE |
   | zone3 | observer | 10.10.10.3 |     2882 | weak_read_version_refresh_interval | NULL      | 100ms | the time interval to refresh cluster weak read version Range: [50ms, +∞)   | OBSERVER | CLUSTER | DEFAULT | DYNAMIC_EFFECTIVE |
   | zone2 | observer | 10.10.10.2  |     2882 | weak_read_version_refresh_interval | NULL      | 100ms | the time interval to refresh cluster weak read version Range: [50ms, +∞)   | OBSERVER | CLUSTER | DEFAULT | DYNAMIC_EFFECTIVE |
   +-------+----------+-------------+----------+------------------------------------+-----------+-------+----------------------------------------------------------------------------+----------+---------+---------+-------------------+

   ```
 2. 使用 root 用户登录数据库的 proxysys 租户，打开弱读阈值相关配置。

   ```sql
   obclient> alter proxyconfig set enable_ob_protocol_v2=true;
   Query OK, 0 rows affected

   obclient> alter proxyconfig set ob_max_read_stale_time='800000';
   Query OK, 0 rows affected

   ```
 3. 正常情况下数据的延迟时间并不会超过设置的 ob_max_read_stale_time 值（800ms），此处示例通过设置弱读副本所在节点的网卡延迟来实现数据的延迟。

   ```sql
   obclient> select svr_ip, sql_port from oceanbase.__all_virtual_proxy_schema where tenant_name = 'mysql' and database_name = 'test' and table_name = 'test' and sql_port > 0 AND role = 2;
   +------------+----------+
   | svr_ip     | sql_port |
   +------------+----------+
   | 10.10.10.2 |     2881 |
   | 10.10.10.3 |     2881 |
   +------------+----------+
   2 rows in set

   ```
 4. 发起弱读请求

   ```sql
   obclient> select /*+READ_CONSISTENCY(WEAK)*/ * from test where c2 = 10;
   Empty set

   ```
 5. 查询弱读副本延迟标记记录

   ```sql
   obclient> show proxysession read_stale;
   +-----------------+----------+--------------+----------------------------+
   | server_addr     | table_id | partition_id | feedback_time              |
   +-----------------+----------+--------------+----------------------------+
   | 10.10.10.2:2881 |   500003 |       200002 | 2023-06-25 11:18:03.129081 |
   +-----------------+----------+--------------+----------------------------+

   ```
 6. 在副本的延迟洗白时间 read_stale_retry_interval 内，该分区的弱读请求不会再继续发给该副本
 7. 过了 read_stale_retry_interval 时间后，ODP 会尝试将请求发给被标记的副本，如果该副本仍处于延迟状态，则 OBServer 节点继续返回弱读延迟反馈，如果副本已经摆脱延迟状态，则请求继续正常执行。

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