create table pp

as

select * from dba_tables,dba_users;

execute dbms_stats.gather_table_stats(ownname => 'SYS',tabname => 'pp');

SQL> select BLOCKS from dba_tab_statistics where table_name='PP' and owner='SYS';

BLOCKS

-----------

1513

SQL> select min(BLOCK_ID) from dba_extents where SEGMENT_NAME='PP' and owner='SYS';

MIN(BLOCK_ID)

-------------

66073

SQL> select max(BLOCK_ID) from dba_extents where SEGMENT_NAME='PP';

MAX(BLOCK_ID)

-------------

67977

SQL> select BLOCK_ID+BLOCKS from dba_extents where SEGMENT_NAME='PP' and owner='SYS' and  BLOCK_ID= 67977;

BLOCK_ID+BLOCKS

---------------

68105

所以占用空间块区间是66073到68105

然后截断表

SQL> truncate table pp;

SQL> execute dbms_stats.gather_table_stats(ownname => 'SYS',tabname => 'pp');

PL/SQL procedure successfully completed

SQL> select min(BLOCK_ID) from dba_extents where SEGMENT_NAME='PP' and owner='SYS';

MIN(BLOCK_ID)

-------------

66073

SQL> select max(BLOCK_ID) from dba_extents where SEGMENT_NAME='PP';

MAX(BLOCK_ID)

-------------

66073

实际这些只是占用了一个EXTENT,但是下一个分区却是从66097开始的,我也不知道为何是SEGMENTS头的原因吧。这时的区间而66073到66097,当然HWM也下降了,使用的块为0

然后

SQL> create table oo

2  as

3  select * from dba_tables,dba_users;

SQL> select min(BLOCK_ID) from dba_extents where SEGMENT_NAME='OO' and owner='SYS';

MIN(BLOCK_ID)

-------------

66097

SQL> select MAX(BLOCK_ID) from dba_extents where SEGMENT_NAME='OO' and owner='SYS';

MAX(BLOCK_ID)

-------------

67977

这里OO的区间实际是66097到67977+128。

这里明显重用的空间。基本都重用了。

所以TRUNCATE的空间是会被新的段运用的

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐