如果表上创建了多个全局索引或复合索引,尤其是对大字段(如 VARCHAR 或 TEXT 类型)建立索引,会导致索引占用的空间远大于数据本身。
索引大小可以这样查询
select /*+ READ_CONSISTENCY(WEAK) */
t1.table_name,
round(sum(t2.data_size/1024/1024/1024), 2) data_size_gb ,
round(sum(t2.required_size)/1024/1024/1024, 2) required_size_gb
from dba_ob_table_locations t1,dba_ob_tablet_replicas t2
where
t1.svr_ip=t2.svr_ip
and t1.ls_id=t2.ls_id
and t1.tablet_id=t2.tablet_id
– and t1.role=‘leader’
and t1.database_name=‘database_name’
and (t1.table_name=‘table_name’
or t1.data_table_id in (select table_id from dba_ob_table_locations where table_name=‘table_name’ limit 1))
group by t1.table_name
order by 3 desc;
with table_id_cet as (
SELECT
DISTINCT table_id,
table_type,
L.SVR_IP,
L.DATABASE_NAME,
L.TABLE_NAME,
L.PARTITION_NAME,
L.SUBPARTITION_NAME,
L.TABLET_ID,
L.LS_ID,
L.ROLE
FROM
CDB_OB_TABLE_LOCATIONS L
WHERE
L.database_name = ‘{database_name}’
AND L.TABLE_NAME = ‘{table_name}’
)
select
L.table_name AS “名称”,
L.table_type,
round(sum(R.DATA_SIZE) / 1024 / 1024 / 1024, 2) as “数据量(GB)”,
round(sum(R.REQUIRED_SIZE) / 1024 / 1024 / 1024, 2) as “磁盘占用量(GB)”
from
(
select
*
from
table_id_cet
UNION ALL
SELECT
DISTINCT table_id,
table_type,
SVR_IP,
DATABASE_NAME,
INDEX_NAME as table_name,
PARTITION_NAME,
SUBPARTITION_NAME,
TABLET_ID,
LS_ID,
ROLE ROLE
FROM
CDB_OB_TABLE_LOCATIONS L
WHERE
data_table_id =(
select
DISTINCT table_id
from
table_id_cet
)
) L
LEFT JOIN CDB_OB_TABLET_REPLICAS R ON (
L.TABLET_ID = R.TABLET_ID
AND L.svr_ip = R.svr_ip
)
GROUP BY L.table_name,L.table_type;