TABLET_ID = 49402 的表是什么表

【 使用环境 】生产环境
【 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 是什么表?

@论坛小助手

日志采集场景: 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 执行错误的场景收集相关诊断信息。

另外,为了确定具体的问题,在此需要您提供一些信息:(下面提出几个问题)

  1. 您是否能提供执行查询时的具体 SQL 语句?
  2. 查询失败时是否有特定的错误码或错误信息?
  3. 是否可以确认 tablet_id = 49402 的状态是否正常(例如通过系统表或管理工具查看)?
  4. 集群中是否存在数据分布不均或者分区表相关的配置?
  5. 是否有近期的 DDL 操作(如删除表、修改表结构等)可能影响到该 tablet?

附上敏捷诊断工具 obdiag 使用帮助链接

通过这两个表 都可以查看表的信息
select table_name,tablet_id from __all_table; --查看表名和tablet_id的关系,确定问题表
select table_name,tablet_id from DBA_OB_TABLE_LOCATIONS; --查看表名和tablet_id的关系,确定问题表

查询结果如图:

根据您提供的查询结果和 OCR 提取的内容,我们可以得出以下结论:

问题分析

  1. 查询无果的原因
    您在 DBA_OB_TABLE_LOCATIONS__all_table 系统视图中尝试查找 tablet_id = 49402 的表信息,但均未找到对应的记录。这可能表明:

    • 该 tablet 已经被删除或其所属的表已被删除。
    • 该 tablet 属于一个临时表或系统内部表,这些表的信息可能不会直接显示在用户可访问的视图中。
  2. OCR 提取内容中的关键信息
    在您上传的图片中,有三条记录与 tablet_id 相关,但并未明确指出 tablet_id = 49402 的具体归属。这可能是由于 OCR 识别不完全或数据展示不完整导致的。

  3. 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 技术支持团队。

详情请参考:

  1. 使用命令行进行运维
  2. 某租户下所有表占用磁盘大小

(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)

这个在业务租户下 查看select table_name,tablet_id from DBA_OB_TABLE_LOCATIONS;

这个表信息发错了 tablet_id代表的是租户id

使用业务租户的 root 用户登录 oceanbase

查询如下:

有没有可能 tablet_id = 49402 的表是一个临时表。怎么确认?

我看上面是有ip信息和租户信息的 你在哪个节点上的业务租户下 查看这个信息 看看是否有select table_name,tablet_id from DBA_OB_TABLE_LOCATIONS;

当前是在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。

你用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 个赞