ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 证明TRUNCTE后空间重用

证明TRUNCTE后空间重用

原创 Linux操作系统 作者:gaopengtttt 时间:2010-07-07 09:50:19 0 删除 编辑

原创 转载请注明出处

下面的例子只是证明空间的重用

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 wner='SYS';
BLOCKS
-----------
1513
SQL> select min(BLOCK_ID) from dba_extents where SEGMENT_NAME='PP' and wner='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 wner='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 wner='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 wner='SYS';

MIN(BLOCK_ID)
-------------
        66097
SQL> select MAX(BLOCK_ID) from dba_extents where SEGMENT_NAME='OO' and wner='SYS';

MAX(BLOCK_ID)
-------------
        67977
这里OO的区间实际是66097到67977+128。
这里明显重用的空间。基本都重用了。
所以TRUNCATE的空间是会被新的段运用的

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/7728585/viewspace-667399/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: LINUX 内存管理
请登录后发表评论 登录
全部评论
wxh gp_22389860 公众号 MySQL学习 书籍 深入理解MySQL主从原理

注册时间:2021-06-07

  • 博文量
    868
  • 访问量
    3495544