首批通过分布式安全可靠测评,为关键业务系统打造
普通租户下 SELECT DBA_OB_LS_LOCATIONS 超时报错 -5150
更新时间:2024-01-22 01:56
问题描述
在使用 OceanBase 数据库社区 V4.1.0_CE 版本的普通租户下查询DBA_OB_LS_LOCATIONS 视图超时并伴随 -5150 报错。
登录用户租户,查询
DBA_OB_LS_LOCATIONS视图,查询会报错超时。查询
DBA_OB_LS_LOCATIONS视图。obclient > SELECT * FROM DBA_OB_LS_LOCATIONS; ERROR 4012 (HY000): Timeout, query has reached the maximum query timeout: 10000000(us), maybe you can adjust the session variable ob_query_timeout or query_timeout hint, and try again.用户租户下查
DBA_OB_LS_LOCATIONS视图时,由于 join 了二张内部表__all_virtual_core_meta_table和__all_virtual_ls_meta_table,走了 px 路径,报错-5150 时,一直重试到超时。导致客户端报错查询超时。具体报错信息如下。
用户租户下单独查询
__all_virtual_core_meta_table时,报错-5150,SQL 路径不会重试,直接跳过并返回空。查询成功。单独查询
__all_virtual_core_meta_table内部表。obclient> SELECT * FROM oceanbase.__all_virtual_core_meta_table; Empty set, 1 warning (0.01 sec)具体报错信息如下。

说明
__all_virtual_core_meta_table 是一张 rs_only 的虚表,需要路由到 RS 所在机器执行。用户租户下查询该表,可能因为 RS 所在机器没有用户租户资源而报错-5150 OB_TENANT_NOT_IN_SERVER。
适用版本
OceanBase 数据库社区 V4.1.0_CE 版本。
问题原因
普通租户下查询,因 RS 节点上没有租户资源,报错-5150。报错OB_TENANT_NOT_IN_SERVER,一直重试到超时。1-1-1 集群,可以保证租户资源都在 RS 上,但凡 Zone 大于1个节点,就不能保证普通租户资源一定在 RS 机器上。
解决方法
升级至问题已修复版本,目前修复版本为 OceanBase 数据库社区版 V4.1.0_CE_BP1 (oceanbase-ce-4.1.0.0-101000022023050809) 及之后版本。