查看数据库库表本地存储文件和空间大小

【 使用环境 】生产环境
【 使用版本 】4.2.0_CE
【问题描述】

80859d6e8b1518ace1aee545f5673e35

问题:
数据库没什么数据,就占用了33G,看不到具体库表的存储占用的空间
想要查看库表的实际数据存储文件、空间大小,应该在哪里统计查看?

业务场景(备份还原):

  1. 需计算当前数据库库表内容存储空间大小,并将其手动备份复制
  2. 在当前设备解压还原数据内容(还原在当前租户内操作)
  3. 对标mysql存储会有每个库表的frm/ibd文件,存储表的结构和数据,可以查看文件和数据文件大小
    3a47678dcc8f27205e4571ababaf4e70

block file 是预分配的,根据datafile_size或datafile_disk_percentage 配置项指定,可以通过show paramters like 查看这两个配置项,一般情况下datafile_size默认值为0,如果设置了非0值,优先级高于datafile_disk_percentage。

  1. 预分配的话,文件大小是固定;
  2. 想要知道具体数据库存储的内容大小,要从哪里获取知悉

用下面SQL看看,输出什么

WITH table_locs AS (
SELECT
	t.tenant_id,
	t.database_name,
	t.table_id,
	t.table_name,
	t.table_type tablet_type,
	t.tablet_id,
	REPLACE(concat(t.table_name,':',t.partition_name,':',t.subpartition_name),':NULL','') tablet_name,
	t.tablegroup_name,
	t.ls_id,
	t.ZONE, 
	t.ROLE,
	t.svr_ip
FROM
	oceanbase.CDB_OB_TABLE_LOCATIONS t
WHERE
	t.data_table_id IS NULL 
UNION
SELECT
	i.tenant_id,
	i.database_name,
	i.table_id,
	t.table_name,
	i.table_type tablet_type,
	i.tablet_id,
	REPLACE(
		REPLACE(concat(i.table_name,':',i.partition_name,':',i.subpartition_name) ,concat('__idx_', i.data_table_id, '_'),'')
		,':NULL',''
	) tablet_name,
	i.tablegroup_name,
	i.ls_id,
	i.ZONE, 
	i.ROLE,
	i.svr_ip
FROM
	oceanbase.CDB_OB_TABLE_LOCATIONS i
INNER JOIN oceanbase.__all_virtual_table t ON
	( i.tenant_id = t.tenant_id
		AND i.data_table_id = t.table_id  )
WHERE i.data_table_id IS NOT NULL 
)
SELECT t.tenant_id,
	t.svr_ip,
	t.database_name,
	round(sum(s.size)/1024/1024/1024,2) size_gb
FROM
	table_locs t JOIN oceanbase.GV$OB_SSTABLES s 
		ON (t.tenant_id=s.tenant_id AND t.ls_id=s.ls_id AND t.svr_ip=s.svr_ip AND t.tablet_id=s.tablet_id)
WHERE 1=1
--	AND t.tenant_id = 1004
--	AND t.database_name IN ('tpccdb')
--	AND t.table_name IN ('bmsql_stock2')
--	AND s.table_type NOT IN ('MEMTABLE')
-- AND t.ROLE IN ('LEADER')
GROUP BY
	t.tenant_id,
	t.svr_ip,
	t.database_name
ORDER BY 
	t.tenant_id,
	t.svr_ip,
	t.database_name;

执行一下这条SQL,看每台机器的实际数据占用:
select svr_ip, svr_port, sum(data_size) / 1024 / 1024 / 1024 as size_g from __all_virtual_tablet_meta_table group by 1 order by 3 desc;