如何查看某个租户下,所有的database 的top 20 表

【 使用环境 】生产环境 or 测试环境 生产
【 OB or 其他组件 】 OB 4.0
【 使用版本 】 OB 4.0
【问题描述】清晰明确描述问题
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!

如何sql 查询 如何查看某个租户下,所有的database 的top 20 表?

1 个赞

为了查询某个租户下所有数据库中的表,并按某种标准排序获取前20名,您需要执行几个步骤。由于具体的排序标准(例如按照表大小、行数等)没有明确说明,这里假设您希望按照每个表的数据大小来排序。以下是基于OceanBase 4.0版本的一个可能的SQL查询方案:

  1. 确定租户ID:

    • 首先需要知道目标租户的ID。可以通过查询gv$tenant视图来获取租户信息。
  2. 查询表信息:

    • 使用gv$all_tablesgv$all_tab_partitions视图来获取表的信息。这些视图包含了关于表的详细信息,包括表的大小等。
  3. 排序和限制结果:

    • 根据表的大小对结果进行排序,并限制输出为前20个表。

综合以上信息,您可以使用如下SQL查询来实现这一需求:

-- 假设租户ID为100 (请替换为实际的租户ID)
SELECT 
    t.tenant_id,
    d.database_name,
    t.table_name,
    t.data_size
FROM 
    gv$all_tables t
JOIN 
    gv$all_databases d ON t.tenant_id = d.tenant_id AND t.database_id = d.database_id
WHERE 
    t.tenant_id = 100 -- 替换为实际租户ID
ORDER BY 
    t.data_size DESC
LIMIT 20;

请注意:

  • gv$all_tables视图包含了非分区表的信息。
  • 如果您想同时考虑分区表,可以使用gv$all_tab_partitions视图,并相应调整查询逻辑。
  • 确保将100替换为您实际想要查询的租户ID。

如果您需要按照其他标准(如行数等)进行排序,请相应修改ORDER BY子句。如果需要进一步的帮助或者有其他具体需求,请提供更多细节。

1 个赞

论坛小助手发的这语句可以查到租户下的dasebase下的表 看你现在的环境还是4.0的版本 建议升级 目前的4.0社区不在维护

1 个赞

这个是3.0版本的,4.0版本查询报错:
SELECT t.tenant_id, d.database_name, t.table_name, t.data_size FROM gv$all_tables t JOIN gv$all_databases d ON t.tenant_id = d.tenant_id AND t.database_id = d.database_id WHERE t.tenant_id =1 ORDER BY t.data_size DESC LIMIT 20

失败原因:

ErrorCode = 1146, SQLState = 42S02, Details = Table ‘oceanbase.gv$all_tables’ doesn’t exist

1 个赞

根据您提供的信息,看起来在OceanBase 4.0版本中,gv$all_tables视图可能已经被移除或重命名。因此,您遇到了“Table ‘oceanbase.gv$all_tables’ doesn’t exist”的错误。

在OceanBase 4.0版本中,用于查询表信息的视图可能会有所不同。通常情况下,可以使用gv$all_objects视图来获取表的信息,该视图包含了数据库对象的详细信息,包括表的大小等。

下面是针对OceanBase 4.0版本的一个示例查询,用于获取指定租户下所有数据库中的表,并按数据大小排序获取前20名:

-- 假设租户ID为100 (请替换为实际的租户ID)
SELECT 
    o.tenant_id,
    d.database_name,
    o.object_name AS table_name,
    o.data_size
FROM 
    gv$all_objects o
JOIN 
    gv$all_databases d ON o.tenant_id = d.tenant_id AND o.data_object_id = d.database_id
WHERE 
    o.tenant_id = 100 -- 替换为实际租户ID
AND 
    o.object_type = 'TABLE'
ORDER BY 
    o.data_size DESC
LIMIT 20;

请注意:

  • gv$all_objects视图包含了数据库对象的信息,包括表。
  • object_type字段用于过滤出表类型。
  • 确保将100替换为您实际想要查询的租户ID。

如果仍然遇到问题,请检查视图名称是否正确以及是否有权限访问这些视图。如果需要进一步的帮助或者有其他具体需求,请提供更多细节。

具体信息可参考以下文档:

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

1 个赞

失败原因:

ErrorCode = 1146, SQLState = 42S02, Details = Table ‘oceanbase.gv$all_objects’ doesn’t exist

mysql模式下怎么查询?

1 个赞

–查询语句
SELECT
d.tenant_id,
d.database_name,
t.table_name
FROM
CDB_TABLES t
JOIN
CDB_OB_DATABASES d ON t.CON_ID = d.tenant_id
where
d.tenant_id=1024
order by database_name desc limit 20;

1 个赞

order by database_name 这个是按照表名排序,能否按照数据库表的SIZE 排序?

–sql语句
select b.TABLE_SCHEMA,b.table_name,b.table_rows from oceanbase.CDB_OB_DATABASES a,information_schema.TABLES b where b.TABLE_SCHEMA=a.DATABASE_NAME and a.TENANT_ID=‘1024’ group by b.TABLE_SCHEMA,b.table_name,b.table_rows order by b.table_rows desc,b.TABLE_SCHEMA desc ,b.table_name desc limit 20;

1 个赞

这个,information_schema.TABLES 是每天合并的时候刷新一次,对吧,如果
我上午10点往一张表灌入1一亿条记录,中午查,该表应该查不到1亿条记录?

是的 和合并有关系

1 个赞

每次合并自动收集统计信息?


https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001054615