如何查看表和分区的磁盘空间

oceanbase 4.2.5.5版本

  1. 目前对表进行了手动分区,打算使用自动分区的方式,前期想评估下目前的整个表的大小和手动分区每个分区的大小,那如何查看呢?
    a. 整个表的大小和索引可以通过select * from DBA_OB_TABLE_SPACE_USAGE来查看,https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002672300
    b. 每个分区的占用的大小,不知道如何查看,有的文档说是查看__all_virtual_table开头的表,但是找不到这几个表呢?
3 个赞

@论坛小助手

为了查看表和分区的磁盘空间,您可以使用以下方法:

  1. 查看整个表的大小

    • 您可以使用 DBA_OB_TABLE_SPACE_USAGE 视图来查看整个表的大小和索引占用的磁盘空间。具体 SQL 语句如下:
    SELECT * FROM DBA_OB_TABLE_SPACE_USAGE;
    

    详细信息可以参考官方文档:DBA_OB_TABLE_SPACE_USAGE

  2. 查看每个分区的大小

    • 您可以通过查询 __all_virtual_table_mgr 表来获取每个分区的大小。具体 SQL 语句如下:
    SELECT a.TENANT_ID, a.DATABASE_NAME, a.TABLE_NAME, a.TABLE_ID, 
    sum(case when b.nested_offset = 0 then IFNULL(b.data_block_count+b.index_block_count+b.linked_block_count, 0) * 2 * 1024 * 1024 else IFNULL(b.size, 0) end) /1024.0/1024/1024 as data_size_in_GB 
    FROM oceanbase.CDB_OB_TABLE_LOCATIONS a inner join oceanbase.__all_virtual_table_mgr b 
    on a.svr_ip = b.svr_ip and a.svr_port=b.svr_port and a.tenant_id = b.tenant_id and a.LS_ID = b.LS_ID and a.TABLET_ID = b.TABLET_ID and a.role ='LEADER' and a.tenant_id = ${租户ID}
    and b.table_type >= 10 and b.size > 0 group by a.TABLE_ID;
    

    请注意,a.tenant_id${租户ID} 需要替换为您实际的租户 ID。

以上方法可以帮助您评估表和分区的磁盘空间占用情况。

检索到的文档如下:

  1. 某租户下所有表占用磁盘大小
  2. 历史合并信息tablet_id查询
2 个赞

SELECT a.TENANT_ID, a.DATABASE_NAME, a.TABLE_NAME, a.TABLE_ID, a.PARTITION_name,
sum(case when b.nested_offset = 0 then IFNULL(b.data_block_count+b.index_block_count+b.linked_block_count, 0) * 2 * 1024 * 1024 else IFNULL(b.size, 0) end) /1024.0/1024/1024 as data_size_in_GB
FROM oceanbase.CDB_OB_TABLE_LOCATIONS a inner join oceanbase.__all_virtual_table_mgr b
on a.svr_ip = b.svr_ip and a.svr_port=b.svr_port and a.tenant_id = b.tenant_id and a.LS_ID = b.LS_ID and a.TABLET_ID = b.TABLET_ID and a.role =‘LEADER’ and a.tenant_id = xxxxxx and a.database_name=‘xxxxxxxx’ and a.table_name=‘xxxxxxxx’
and b.table_type >= 10 and b.size > 0 group by a.TABLET_ID;

  1. 需要在sys租户下执行
  2. __all_virtual_table_mgr为系统隐藏表,通过show tables无法查看,可以通过-- 从系统表查有哪些虚拟表
    SELECT * FROM information_schema.TABLES
    WHERE TABLE_SCHEMA = ‘oceanbase’
    AND TABLE_NAME LIKE ‘__all_virtual%’;查看

不错不错

该学习的还很多啊