首批通过分布式安全可靠测评,为关键业务系统打造
弱读 SQL 所访问分区涉及多个日志流时因需要发送 RPC 请求而导致变慢
更新时间:2026-05-18 01:51
弱读 SQL 所访问的分区,如果涉及多个日志流、SQL 的执行计划属于 Uncertain 的执行计划或租户开启了弱读单调读(enable_monotonic_weak_read=true)时,会发送 RPC 请求 GTS Leader 节点,若会话所在节点与 GTS Leader 节点两节点之间网络延迟高,则 SQL 的耗时会变高。
详细说明
在一般情况下,弱读 SQL 只需访问本地节点,无需访问其他机器,故常用于两地三中心或三地五中心的跨城部署架构,直接访问只读 Zone 以减少 SQL 执行的网络延迟。但在某些情况下,弱读 SQL 需要访问 GTS Leader 节点来获取准确的 GTS,具体如下。
开启了单调读(
enable_monotonic_weak_read=true)需要发送 RPC。SQL 所需访问的分区跨越了日志流。
执行计划属于 Uncertain 的执行计划。
而因为三地五中心的架构,弱读访问的只读 Zone 与 GTS Leader 之间的网络延迟可能非常高,是 SQL 在 Leader 节点上执行的数百倍,当弱读 SQL 请求 Leader 节点时会因为 GTS 请求导致耗时大大增加。 判断弱读请求是否发送了 RPC,可以通过弱读语句的 sql audit 中的 RPC_COUNT 字段来确认,若 RPC_COUNT 不等于 0,则证明发送了 RPC。

若各个节点间的网络延迟确实无法降低,建议更改为主备租户的架构,弱读 SQL 访问备租户。
影响租户
影响 OceanBase 数据库中的 SYS 租户和 Oracle 租户以及 MySQL 租户。
适用版本
OceanBase 数据库 V4.x 版本。