---
title: "SQL 路由 - OceanBase 数据库 V4.5.0 | OceanBase 文档中心"
description: SQL 路由 ODP 会充分考虑用户请求涉及的副本位置、用户配置的读写分离路由策略、OceanBase 数据库多地部署的最优链路，以及 OceanBase 数据库各机器的状态及负载情况，将用户的请求路由到最佳的 OBServer 节点，最大程度的保证了 OceanBase 数据库整体的高性能运转。 开始阅读本节内容之…
---
切换语言

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

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

# SQL 路由

更新时间：2026-04-04 18:50:31

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.5.0/zh-CN/700.reference/100.oceanbase-database-concepts/600.data-link/200.database-proxy/200.sql-routing.md)  

ODP 会充分考虑用户请求涉及的副本位置、用户配置的读写分离路由策略、OceanBase 数据库多地部署的最优链路，以及 OceanBase 数据库各机器的状态及负载情况，将用户的请求路由到最佳的 OBServer 节点，最大程度的保证了 OceanBase 数据库整体的高性能运转。

开始阅读本节内容之前，您可以先了解一些路由相关的概念，便于您更好的了解下面的内容。

- Zone
 - Region
 - Server List
 - RS List
 - Location Cache
 - 副本
 - 合并
 - 强一致性读/弱一致性读
 - 读写 Zone
 - 分区表
 - 分区键

## OceanBase 数据库执行计划

执行计划分为三种：Local 、Remote 、Distribute。ODP 的作用主要是尽量避免 Remote 计划（效率低，性能差），将路由尽可能准确变为 Local 计划。

## ODP 路由作用

理解了上述 可用区/Region/分区/副本的基本概念和物理含义后，就能理解 ODP 的路由思路了。从分区的设计到其物理分布，以及本地执行计划的高效性考虑，ODP 需要尽可能对 SQL 进行准确路由，主要过程将经历：SQL 解析、分区计算、分区信息获取、副本策略选择等。

## 非分区表路由

非分区表可以直接利用 Location Cache 中的副本信息。ODP 保存了分区和 OBServer 节点地址的映射，通过解析 SQL 中的表名，根据表名查询 ODP 缓存中的分区对应的机器 IP。缓存的有效性，有以下三种情况：

- 缓存中找不到，此时需要访问 OBServer 节点查询最新映射并缓存。
 - 缓存中存在但不可用，此时需要重新去 OBServer 节点查询并更新。
 - 缓存中存在且可用，此时可以直接使用。

## 分区表路由

分区表的路由相比非分区表而言，增加了分区 ID 及其相关的计算和查询过程。在获取了 Location Cache 后，分区表需要继续判定表的一级/二级分区，根据不同分区键类型和计算方式，计算分区 ID 并获取对应主备副本信息。

做分区计算时，通过表结构可以得知分区键及其类型，之后通过解析 SQL 语句获取对应分区键的值，并根据表结构和分区键类型做分区计算，从而能转发到对应分区所在的机器。

正常情况下，通过分区计算，ODP 可以将 SQL 路由到分区对应的机器上，从而避免 Remote 执行，提升效率。在 ODP V3.2.0 版本，已针对分区表且无法计算分区路由的场景进行优化，由随机选择租户的机器路由，优化成随机从分布了分区的机器中随机路由，提升命中率，尽可能减少 Remote 执行。

## 副本路由选择（常规部署）

对于强一致性读，且 SQL 指定了表名，将路由到该表对应分区的 Leader 的 OBServer 节点；对于弱一致性读、登录认证请求、强一致性读但没有指定表名等情况，存在主备均衡路由（默认）、备优先路由、不合并备优先路由这三种路由策略。

### 主备均衡路由（默认）

将按照以下优先级进行路由选择：

1. 相同 Region，相同 IDC(同一个数据中心)，不在合并状态的节点。
 2. 相同 Region，不同 IDC(不同的数据中心)，不在合并状态的节点。
 3. 相同 Region，相同 IDC(同一个数据中心)，正在合并状态的节点。
 4. 相同 Region，不同 IDC(不同的数据中心)，正在合并状态的节点。
 5. 不同 Region，不在合并状态的节点。
 6. 不同 Region，正在合并状态的节点。

### 备优先路由

常规部署下，支持备优先读策略。通过用户级别的系统变量 `proxy_route_policy` 控制，仅在常规部署和弱一致性读的情况下生效，优先读 Follower 而非主备均衡路由。

在常规模式部署和弱一致性读时，设置 `set @proxy_route_policy='follower_first';`，路由将优先发往备节点，即使 OBServer 节点处于正在合并状态。将按照以下优先级进行路由选择：

1. 相同 Region，相同 IDC，不在合并状态的备节点。
 2. 相同 Region，不同 IDC，不在合并状态的备节点。
 3. 相同 Region，相同 IDC，正在合并状态的备节点。
 4. 相同 Region，不同 IDC，正在合并状态的备节点。
 5. 相同 Region，相同 IDC，不在合并状态的主节点。
 6. 相同 Region，不同 IDC，不在合并状态的主节点。
 7. 不同 Region，不在合并状态的备节点。
 8. 不同 Region，正在合并状态的备节点。
 9. 不同 Region，不在合并状态的主节点。
 10. 不同 Region，正在合并状态的主节点。

### 不在合并的备优先路由

常规部署下，弱一致性读，设置 `set @proxy_route_policy='unmerge_follower_first';` 时，路由将优先发往不在合并的备节点。将按照以下优先级进行路由选择：

1. 相同 Region，相同 IDC，不在合并状态的备节点。
 2. 相同 Region，不同 IDC，不在合并状态的备节点。
 3. 相同 Region，相同 IDC，不在合并状态的主节点。
 4. 相同 Region，不同 IDC，不在合并状态的主节点。
 5. 相同 Region，相同 IDC，正在合并状态的备节点。
 6. 相同 Region，不同 IDC，正在合并状态的备节点。
 7. 不同 Region，不在合并状态的备节点。
 8. 不同 Region，不在合并状态的主节点。
 9. 不同 Region，正在合并状态的备节点。
 10. 不同 Region，正在合并状态的主节点。

### 强制发送到只读副本的路由

常规部署下，弱一致性读，设置 `set @proxy_route_policy='FORCE_READONLY_ZONE';` 时，路由将所有的只读请求不会转发到非只读副本。其规则如下：

- 弱读请求：路由到只读副本中的节点。
 - 非弱读请求：报错 `4007`，该路由规则下不允许非只读请求，如果业务确实需要发送非只读请求，请将变量 `ob_route_policy` 的值设置为其他的规则。

### 其他

常规部署下，弱一致性读，当 `proxy_route_policy` 变量取其他值时，路由选择将退化为普通的弱一致性读主备均衡路由策略，即主备均衡路由(默认)。

## 副本路由选择（读写分离部署）

即使用了只读副本的部署模式。读写分离部署时，不存在备优先读的路由策略，路由依赖系统变量 `ob_route_policy`。主要存在以下几种情况：

1. 对于强一致性读语句，且 SQL 指定了表名，那么直接路由到该表涉及的分区的 Leader 的 OBServer 节点执行。
 2. 对于强一致性读语句，SQL 为"select 不指定表名/use database/set session 级别系统变量"时，忽略 Zone 属性，此时等同于常规部署下的主备均衡路由（默认）。
 3. 对于强一致性读语句，不包含登录认证请求，且去除 1 & 2 场景的请求，将按照以下策略进行路由：

      1. 相同 Region，相同 IDC，不在合并状态的读写 Zone 中的节点。
      2. 相同 Region，不同 IDC，不在合并状态的读写 Zone 中的节点。
      3. 相同 Region，相同 IDC，正在合并状态的读写 Zone 中的节点。
      4. 相同 Region，不同 IDC，正在合并状态的读写 Zone 中的节点。
      5. 不同 Region，不在合并状态的读写 Zone 中的节点。
      6. 不同 Region，正在合并状态的读写 Zone 中的节点。

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