达梦数据库批量统计表所占用的磁盘空间

本文介绍了两种方法来批量统计达梦数据库中各表所占用的磁盘空间。新方法是直接使用数据库内置的系统存储过程,而旧方法则涉及创建临时表并执行动态SQL。通过这些方法,可以快速获取所有表的空间使用情况,提高工作效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有时候,我们需要了解数据库的一些表所占用的磁盘空间有多大,虽然通过管理工具可以查看,但是只能一张表一张表的看,效率很慢。因此,可以通过以下方式,批量统计每张表所占用的表磁盘间是多大。

原方法更新:直接使用达梦数据库内置系统存储过程统计表行数和表大小

SELECT 
B.OWNER,
B.TABLE_NAME,
ROUND(TABLE_USED_PAGES(B.OWNER,B.TABLE_NAME)*(PAGE/1024)/1024/1024,2) "GB",
TABLE_ROWCOUNT(B.OWNER,B.TABLE_NAME) "TABLE_ROWS"
FROM (
SELECT A.OWNER,
A.TABLE_NAME 
FROM ALL_TABLES A 
WHERE 
A.TABLE_NAME NOT LIKE 'CTI%' 
AND A.TABLE_NAME NOT LIKE 'SREF_CON_TAB%' 
AND A.TABLE_NAME NOT LIKE 'BM%'
) B
ORDER BY 3 DESC,1,2;

旧思路:首先创建一张临时表,用来存储统计的表所占用磁盘空间数据信息。然后通过脚本计算出表所使用的空间,最后将计算结果批量插入到临时表中即可。

具体脚本如下:

--DROP TABLE TABLESIZE_COUNT;
--创建一张临时表,其中OWNER为模式名,TABLE_NAME为表名,TABLE_USED_PAGES为表使用的空间大小,单位为K,TABLE_USED_SPACE为表占用的空间大小,单位为K
CREATE TABLE TABLESIZE_COUNT (OWNER VARCHAR(100),TABLE_NAME VARCHAR(100),TABLE_USED_PAGES INTEGER,TABLE_USED_SPACE INTEGER);
 
 
DECLARE
V_OWNER VARCHAR2(100);
V_TABNAME VARCHAR2(100);
STMT1  VARCHAR2(200);
STMT2  VARCHAR2(200);
NUM_ROWS1 NUMBER;
NUM_ROWS2 NUMBER;
BEGIN
        FOR REC IN
        (
                SELECT OWNER, TABLE_NAME FROM DBA_TABLES WHERE OWNER='HZQ' ORDER BY 1, 2
        )
        LOOP
                SELECT REC.OWNER, REC.TABLE_NAME INTO V_OWNER, V_TABNAME FROM DUAL;
                
                STMT1 := 'SELECT TABLE_USED_PAGES('''||V_OWNER||''','''||V_TABNAME||''')*(PAGE/1024)';
                EXECUTE IMMEDIATE STMT1 INTO NUM_ROWS1;
                EXECUTE IMMEDIATE 'INSERT INTO TABLESIZE_COUNT(OWNER,TABLE_NAME,TABLE_USED_PAGES) VALUES('''||V_OWNER||''','''||V_TABNAME||''','''||TO_NUMBER(NUM_ROWS1)||''');';
                STMT2 := 'SELECT TABLE_USED_SPACE('''||V_OWNER||''','''||V_TABNAME||''')*(PAGE/1024)';
                EXECUTE IMMEDIATE STMT2 INTO NUM_ROWS2;
                EXECUTE IMMEDIATE 'UPDATE TABLESIZE_COUNT SET TABLE_USED_SPACE= '''||TO_NUMBER(NUM_ROWS2)||''' WHERE OWNER= '''||V_OWNER||''' AND TABLE_NAME = '''||V_TABNAME||''';';
                COMMIT;
        END LOOP;
END;
--TRUNCATE TABLE TABLESIZE_COUNT;
--SELECT COUNT(*) FROM TABLESIZE_COUNT;
SELECT OWNER,TABLE_NAME,TABLE_USED_PAGES "TABLE_USED_PAGES(KB)",TABLE_USED_SPACE "TABLE_USED_SPACE(KB)" FROM TABLESIZE_COUNT;

在脚本执行完成后,直接查看该表信息即可。

示例如下:

附:

使用DM管理工具查看表所使用的空间大小:

1.选择要查看的模式下的表

2.右键选择【属性】

3.在表属性对话框中即可查看到表所使用的空间

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DB实践

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值