Loading

DM8表空间缩小测试

1 问题提出

在最新版本的DM8中,可以缩小表空间的大小,针对功能提出如下疑问:
(1)回滚表空间在占满之后能否缩小?
(2)回滚表空间在缩小之后能否回滚到上一次提交的节点?
(3)回滚表空间在缩小之后再提交是否会出现数据丢失?
(4)main表空间能否缩小到任意值?

2 测试结论

针对以上问题测试得出如下回答:
(1)回滚表空间在占满之后可以缩小。回滚表空间到达一定的阈值后会提示“回滚表空间不足”,表空间不会被完全占满,可以将表空间缩小到占用的空间大小。例如:回滚表空间设置大小为64M,插入到56M的时候就会提示被占满了,此时缩小表空间无论缩小到何值都会自动跳转到56M。
(2)回滚表空间在缩小之后可以回滚到上一次提交的节点。无论roll.dbf的大小怎么变化,回滚之后都会将回滚表空间里的内容丢弃,退回到默认表空间的末尾节点。
(3)回滚表空间在缩小之后再提交不会出现数据丢失。因为缩小表空间并不是真正意义上的缩小,只是缩小了回滚表空间的空闲部分,所以不会出现数据丢失,可以正常的将表空间里的内容提交。
(4)main表空间不能缩小到任意值。最小只能缩小到实际的数据量的大小,main表空间的大小总是大于或等于实际的使用量。
总结:
1.roll表空间可以设置最大值,在roll表空间中的数据量达到87%左右时,会提示回滚表空间不足。
2.roll表空间中的数据量达到最大值时,依旧可以缩小roll.dbf的大小,但是缩小之后的结果不会小于里面数据量的大小。测试64M大小的roll.dbf,数据量插入到56M左右提示回滚表空间不足,此时将roll表空间缩小到32M,实际只缩小到了56M,且无任何提示。
3.roll表空间满载并缩小之后回滚正常、提交正常。
4.main表空间同样可以缩小,但是只能缩小空闲部分的空间,缩小之后的空间不能小于实际的使用空间。

3 测试环境

缩小表空间是在7月月度版v 8.1.2.138中新增的功能,测试环境如下:

数据库版本 V 8.1.2.138
安装目录 /dm8
操作系统 CentOS 7.7

4 roll表空间测试

4.1 测试准备

1.关闭数据库的隐式自动提交,避免数据库执行之后自动进行提交。

select PARA_NAME,PARA_VALUE,PARA_TYPE,DESCRIPTION from v$dm_ini where para_name='DDL_AUTO_COMMIT';
--查询隐式自动提交是否开启

在dm.ini中修改DDL_AUTO_COMMIT的值为0并重启数据库即可正常关闭。
2.新建测试表test并插入数据。

create table  SYSDBA.test as select * from SYS.SYSOBJECTS;

表中的数据如下图所示:

可以看到表中共有875行数据。
3.设置roll.dbf的大小,设置为64M,并关闭自动扩充。如下图所示:

4.2 测试步骤

1.循环插入大量数据测试插入多少条数据可以插满。插入1170×875条数据会超出表空间大小。

BEGIN
for i in 1..1170 loop
insert into SYSDBA.test select * from SYS.SYSOBJECTS;
end loop;
end;
--插入1170×875条数据。

提示回滚表空间不足,插入失败:

测试插入1160×875条数据,插入成功,说明1160×875条数据所占的空间已经接近roll.dbf的大小。此时回滚表空间已经处于满载的状态。

2.查看roll.dbf的空间使用情况。

select * from v$tablespace;

可以看到回滚表空间满载的状态下还有8192-7120的空闲空间。可能是某种保护机制会保留一部分空闲空间。此时的roll表空间使用率为7120/8192=87%,说明roll表空间的使用率超过87%左右时,就会提示回滚表空间不足。

同时可以在达梦管理工具中查看空间使用率为83%,两者存在一定的差值,以实际计算的87%为主。

3.在线修改roll表空间的大小,将64M修改为32M。

点击确定之后没有出现任何提示,很容易让人误以为修改成功。
再次查看roll表空间的大小。发现并不是32M的大小,而是56M。说明并没有修改成功,数据库后台自动将其改为了56M。

缩小之后的表空间的使用率达到了99.5%(7120/7152)。

在达梦管理工具中显示达到了94.6%。

说明在roll表空间满载之后只能缩小到数据量的大小,不能小于数据量的大小。
4.测试能否回滚到上一次提交的节点。点击回滚按钮之后,发现原本的test表中的内容没有变化,且数量也没有变化。说明回滚成功。

5.测试提交之后是否会出现数据丢失。点击提交按钮之后查看test表空间的数据。

数据量变为了1015875行,比之前多了1015000行,1015000=1160×875,说明回滚表空间里的内容全部提交,没有出现数据丢失。

5 main表空间测试

在main表空间接近满载的时候缩小其空间,是否可以缩小到任意值。根据roll表空间的测试结果,推测只能缩小到main表空间的数据量大小,实际测试结果也是如此。
main总空间16256,使用的空间14608。

将main表空间缩小到一个小于14608的值,实际只能缩小到14608,此时main表空间使用率达到100%。

posted @ 2022-11-17 17:23  tazimi  阅读(397)  评论(0编辑  收藏  举报