oracle租户个mysql租户如何查看表占用空间大小,单副本,不要查总的,总的没有太大意义

【 使用环境 】 测试环境
【 OB or 其他组件 】 OB
【 使用版本 】
【问题描述】oracle租户个mysql租户如何查看表占用空间大小,单副本,不要查总的,查询索引空间大小呢?
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

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

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

@论坛小助手

1 个赞

用户的问题是关于如何在 OceanBase 的 Oracle 租户和 MySQL 租户中查看单副本表占用的空间大小,而不是总的表空间大小。此问题与 obdiag 工具的日志采集或根因分析功能无关,因此不适用任何 obdiag 场景命令。

在这种情况下,建议您通过 SQL 查询来获取单副本表占用的空间大小信息。可以参考以下 SQL 查询语句:

对于 MySQL 租户:

SELECT TABLE_NAME, DATA_LENGTH, INDEX_LENGTH, DATA_FREE 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = 'your_database_name';

对于 Oracle 租户:

SELECT SEGMENT_NAME, BYTES, BLOCKS 
FROM USER_SEGMENTS 
WHERE SEGMENT_TYPE = 'TABLE';

请将 your_database_name 替换为实际的数据库名称。

为了更好地帮助您,请提供以下信息:

  1. 您使用的是 OceanBase 的哪个版本?
  2. 您当前操作的是 Oracle 租户还是 MySQL 租户?
  3. 是否有特定的表需要查询?如果有,请提供表名。
  4. 是否已经尝试过上述 SQL 查询?如果尝试过,请分享查询结果以便进一步分析。

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

1 个赞

MySQL [oceanbase]> SELECT TABLE_NAME, DATA_LENGTH, INDEX_LENGTH, DATA_FREE
→ FROM INFORMATION_SCHEMA.TABLES
→ WHERE TABLE_SCHEMA = ‘test’;
±------------±------------±-------------±----------+
| TABLE_NAME | DATA_LENGTH | INDEX_LENGTH | DATA_FREE |
±------------±------------±-------------±----------+
| test_number | 0 | NULL | NULL |
| t1 | 0 | NULL | NULL |
±------------±------------±-------------±----------+
2 rows in set (0.094 sec)

1 个赞

根据您提供的查询结果,我们可以看到 DATA_LENGTHINDEX_LENGTHDATA_FREE 的值均为 0NULL。这可能是因为:

  1. 表中没有数据:如果表中没有任何数据,那么 DATA_LENGTHINDEX_LENGTH 都会显示为 0
  2. 统计信息未更新:OceanBase 的统计信息可能尚未更新,导致查询到的值不准确。

解决方案

1. 确认表是否有数据

首先,请确认表中是否确实有数据。可以通过以下 SQL 查询表中的记录数:

SELECT COUNT(*) FROM test.test_number;
SELECT COUNT(*) FROM test.t1;

如果返回的结果大于 0,说明表中有数据;否则,表为空,因此占用空间为 0 是正常的。

2. 更新统计信息

如果表中有数据但查询结果显示为 0NULL,可以尝试更新 OceanBase 的统计信息。对于 MySQL 租户,可以使用以下命令:

ANALYZE TABLE test.test_number;
ANALYZE TABLE test.t1;

更新完成后,再次执行之前的查询语句:

SELECT TABLE_NAME, DATA_LENGTH, INDEX_LENGTH, DATA_FREE 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = 'test';

3. 查询索引占用的空间大小

如果您想单独查询索引占用的空间大小,可以参考以下 SQL:

SELECT TABLE_NAME, INDEX_NAME, SEQ_IN_INDEX, COLUMN_NAME, INDEX_TYPE 
FROM INFORMATION_SCHEMA.STATISTICS 
WHERE TABLE_SCHEMA = 'test';

此查询将返回表中所有索引的相关信息,包括索引名称、列名和索引类型等。

总结

  • 如果表中无数据,则 DATA_LENGTHINDEX_LENGTH 显示为 0 是正常现象。
  • 如果表中有数据但查询结果仍为 0NULL,请尝试更新统计信息。
  • 使用 INFORMATION_SCHEMA.STATISTICS 可以查询索引的具体信息。

如果问题仍未解决,请提供更多上下文信息(如表结构、数据量等),以便进一步分析。

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

  1. information_schema.TABLES
  2. information_schema.STATISTICS
  3. MID
  4. oceanbase.DBA_WR_SQLTEXT
  5. BIT_LENGTH
  6. DBA_MVREF_STATS_PARAMS
  7. LEFT

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

1 个赞

oracle租户如何查询表和索引占用大小呢?@论坛小助手

2 个赞

您好,您提的这个技术问题可能牵涉到 OceanBase 企业版范围内的功能细节;针对此类问题,建议你通过以下方式寻求帮助:

  1. 如你所在的企业客户已签署 OceanBase 企业版销售合同,请你联系客户经理;

  2. 如你所在的企业客户尚未签署 OceanBase 企业版销售合同,你可通过OceanBase官网商务咨询页面留下你的联系方式,OceanBase企业版的业务顾问会在一个工作日内与你联系。

另外,我们欢迎你使用社区版,并在论坛/社群中分享你对社区版本的想法、经验和问题,与其他社区成员共同交流。

2 个赞

根据租户不同来查询不同的系统字典