在 OceanBase 数据库 V4.0 之前的版本中,全局事务服务(GTS)是由 __all_dummy 表的 Leader 节点提供的。当遇到 __all_dummy 表无主、获取 GTS RPC 异常及时钟源切换等情况时,可能会出现 OB_GTS_NOT_READY 错误,表示全局事务服务不可用。
排查方法
获取租户的租户 ID。
找到报错的租户并记录其租户 ID。
计算
__all_dummy的 table_id。使用下面的公式根据租户 ID 计算
__all_dummy的 table_id:公式: obclient> select (tenant_id << 40) | 135 from dual; 示例: 如果租户 ID 为 1002,则 obclient> select (1002 << 40) | 135 from dual;使用计算出的 table_id 查询 Leader 状态。
obclient> SELECT * FROM __all_virtual_election_info WHERE table_id = <calculated_table_id>;无主情况。
如果发现
__all_dummy表无主,则排查无主原因。
如果
__all_dummy表有主,则检查 GTS RPC 是否存在异常。检查获取 Leader 失败。
在日志中搜索以下信息,确实是否获取 Leader 位置失败:
grep -rn "get gts leader failed" ./observer.log grep -rn "gts nonblock renew error" ./observer.log如果发现这类信息,请参考 Location Cache 问题排查
RPC 发送失败。
如果没有发现获取 Leader 失败的明显报错,继续搜索以下相关信息,以判断是否请求发送失败:
grep -rn "update latest srr error" ./observer.log grep -rn "msg init failed" ./observer.log grep -rn "post gts request failed" ./observer.log如果以上日志信息也没有异常,则可能 RPC 请求已发送成功,但可能因为接收端回消息失败或消息在网络中滞留导致的问题。
适用版本
OceanBase 数据库 V2.x 和 V3.x 版本。