为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM8
【操作系统】:麒麟V10
【CPU】:
【问题描述】*:请问如何查看每个分区的数据量?或者通过SQL查看每个分区占用的空间?
https://mp.weixin.qq.com/s/AgMBsXc9qkSiA5h2POP4pA
测试下下面这个SQL,看看是否合用。
注意最后条件里的表名参数值替换为你要查看数据量的表名
SELECT SCH.NAME AS SCHEMA_NAME
,TAB.ID
,TAB.NAME AS TABLE_NAME
,PAR.PARTITION_NAME
,CASE WHEN TAB.INFO3&0X3F IN (0x13, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27) THEN HTS.NAME || '(Huge TS)'
ELSE TS.NAME
END TABLESPACE_NAME
,TABLE_ROWCOUNT(SCH.NAME,TAB.NAME) AS "Table/Partition row count"
,ROUND(CAST(TABLE_USED_SPACE(SCH.NAME,TAB.NAME) AS NUMBER) * PAGE / 1024 / 1024,2) "Table/Partition used space(MB)"
,ROUND(CAST(TABLE_USED_PAGES(SCH.NAME,TAB.NAME) AS NUMBER) * PAGE / 1024 / 1024,2) "Table/Partition data size(MB)"
,IDXINFO.*
FROM SYSOBJECTS TAB
JOIN SYSOBJECTS IDX ON IDX.PID = TAB.ID
JOIN SYSINDEXES IDXINFO ON IDXINFO.ID = IDX.ID AND BITAND(IDXINFO.XTYPE,0x01) = 0x00
JOIN SYSOBJECTS SCH ON SCH.ID = TAB.SCHID
LEFT JOIN SYSHPARTTABLEINFO PAR ON PAR.PART_TABLE_ID = TAB.ID
LEFT JOIN V$TABLESPACE TS ON TS.ID = IDXINFO.GROUPID
LEFT JOIN V$HUGE_TABLESPACE HTS ON HTS.ID = IDXINFO.GROUPID
WHERE SCH.NAME = USER
AND NOT REGEXP_LIKE(TAB.NAME,'\$.*AUX$') --这个条件是用来过滤掉辅助表
AND TAB.NAME LIKE '表名%'
跟行表差不多,可以参考一下下面的图和语句:
select owner,table_name, table_rowcount(owner,table_name) tab_rows,
table_used_space(owner,table_name)/1024.0/1024.0*page tab_mb
from dba_tables where owner='' and table_name like '%';