若水
#1
【 使用环境 】生产环境
【 OB or 其他组件 】Oceanbase 社区版 三节点分布式集群
【 使用版本 】V 4.3.5
【问题描述】
在查询历史 compaction 记录 oceanbase.GV$OB_TABLET_COMPACTION_HISTORY 时,发现 tablet_id = 49402 的表的合并信息。
当使用 sys 租户查询该表的信息时,没有查到对应的表。
使用的查询语句是:
select * from oceanbase.cdb_ob_table_locations l where l.svr_ip = 'xxx.xxx.xxx.184' and l.tenant_id = '1002' and l.tablet_id = '49402'\G;
请问 tablet_id = 49402 是什么表?
@论坛小助手
论坛小助手
#3
日志采集场景: SQL执行出错
日志采集命令: obdiag gather scene run --scene=observer.sql_err --env “{db_connect=’-h127.0.0.1 -P2881 -utest@test -p****** -Dtest’, trace_id=‘Yxx’}”
为了更好地帮助您定位 tablet_id = 49402 所属的表,请使用上述命令进行日志采集,并将采集到的日志提供给我们以便确认问题所在。此命令会针对 SQL 执行错误的场景收集相关诊断信息。
另外,为了确定具体的问题,在此需要您提供一些信息:(下面提出几个问题)
- 您是否能提供执行查询时的具体 SQL 语句?
- 查询失败时是否有特定的错误码或错误信息?
- 是否可以确认 tablet_id = 49402 的状态是否正常(例如通过系统表或管理工具查看)?
- 集群中是否存在数据分布不均或者分区表相关的配置?
- 是否有近期的 DDL 操作(如删除表、修改表结构等)可能影响到该 tablet?
附上敏捷诊断工具 obdiag 使用帮助链接
淇铭
#4
通过这两个表 都可以查看表的信息
select table_name,tablet_id from __all_table; --查看表名和tablet_id的关系,确定问题表
select table_name,tablet_id from DBA_OB_TABLE_LOCATIONS; --查看表名和tablet_id的关系,确定问题表
论坛小助手
#6
根据您提供的查询结果和 OCR 提取的内容,我们可以得出以下结论:
问题分析
-
查询无果的原因
您在 DBA_OB_TABLE_LOCATIONS
和 __all_table
系统视图中尝试查找 tablet_id = 49402
的表信息,但均未找到对应的记录。这可能表明:
- 该 tablet 已经被删除或其所属的表已被删除。
- 该 tablet 属于一个临时表或系统内部表,这些表的信息可能不会直接显示在用户可访问的视图中。
-
OCR 提取内容中的关键信息
在您上传的图片中,有三条记录与 tablet_id
相关,但并未明确指出 tablet_id = 49402
的具体归属。这可能是由于 OCR 识别不完全或数据展示不完整导致的。
-
tablet_id 的可能归属
根据 OceanBase 的设计,tablet_id
是分区表或分片表的唯一标识符。如果无法通过常规视图查询到相关信息,可以进一步检查以下内容:
-
历史 DDL 操作:确认是否有近期的删除表或修改表结构的操作。
-
回收站中的表:OceanBase 社区版支持回收站功能,您可以检查回收站中是否存在被删除的表。
SHOW RECYCLEBIN;
-
系统内部表:某些系统内部表(如
__all_core_table
)可能不会直接显示在用户视图中。您可以尝试查询这些系统内部表以获取更多信息。
解决方案
以下是逐步排查和定位问题的建议:
1. 检查回收站中的表
执行以下 SQL 查询回收站中的表,确认是否有关联的表被删除:
SHOW RECYCLEBIN;
如果发现相关表,可以通过以下命令恢复:
FLASHBACK TABLE <table_name> TO BEFORE DROP;
2. 查询系统内部表
尝试查询系统内部表 __all_core_table
或其他相关表,确认 tablet_id = 49402
是否属于某个系统表:
SELECT table_name, tablet_id FROM __all_core_table WHERE tablet_id = 49402;
3. 检查历史 compaction 记录
由于您提到在 GV$OB_TABLET_COMPACTION_HISTORY
中发现了 tablet_id = 49402
的合并记录,可以进一步查询该记录以获取更多信息:
SELECT * FROM oceanbase.GV$OB_TABLET_COMPACTION_HISTORY WHERE tablet_id = 49402;
4. 联系技术支持
如果以上方法仍无法定位问题,请提供以下信息以便进一步排查:
- 集群的具体配置(如租户 ID、数据库名称等)。
- 最近的 DDL 操作记录。
- 使用
obdiag
工具采集的相关日志。
希望以上方法能够帮助您解决问题!如果有更多疑问,请随时联系 OceanBase 技术支持团队。
详情请参考:
- 使用命令行进行运维
- 某租户下所有表占用磁盘大小
(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)
淇铭
#7
这个在业务租户下 查看select table_name,tablet_id from DBA_OB_TABLE_LOCATIONS;
淇铭
#8
这个表信息发错了 tablet_id代表的是租户id
若水
#9
使用业务租户的 root 用户登录 oceanbase
查询如下:
若水
#10
有没有可能 tablet_id = 49402 的表是一个临时表。怎么确认?
淇铭
#11
我看上面是有ip信息和租户信息的 你在哪个节点上的业务租户下 查看这个信息 看看是否有select table_name,tablet_id from DBA_OB_TABLE_LOCATIONS;
若水
#12
当前是在184节点上,使用 tenant_id= 1002 租户的 root 用户登录 oceanbase 数据库。
使用
select table_name,tablet_id from DBA_OB_TABLE_LOCATIONS limit 5;
select table_name,tablet_id from DBA_OB_TABLE_LOCATIONS where tablet_id = 49402;
查询结果如下:
因为集群是三节点,所以第一个查询结果相同表名出现了三次。oceanbase 的内部表是可以查到的。
只是在 compaction 历史记录中发现 tablet_id=49402 的表发生多次merge,而无法找到对应的table_name。
淇铭
#13
你用table_id查询看看 tablet_id是否发生变化
sys租户下查询 用table_id查询
select table_id,table_name,tablet_id from oceanbase.CDB_OB_TABLE_LOCATIONS where table_id=xxxx;
1 个赞