Oracle查看块是否被重用,Oracle 块重用

SQL> create table t2 as select * from dba_objects;

Table created.

SQL>  select table_name,num_rows,blocks,num_rows/blocks from dba_tables where table_name='T2' and owner='SCOTT';

TABLE_NAME                       NUM_ROWS     BLOCKS NUM_ROWS/BLOCKS

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

T2

SQL> exec dbms_stats.gather_table_stats('SCOTT','T2');

PL/SQL procedure successfully completed.

SQL> select table_name,num_rows,blocks,num_rows/blocks from dba_tables where table_name='T2' and owner='SCOTT';

TABLE_NAME                       NUM_ROWS     BLOCKS NUM_ROWS/BLOCKS

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

T2                                  72881       1065      68.4328638

SQL>  delete from t2 where rownum <=10000;

10000 rows deleted.

SQL> commit;

Commit complete.

SQL> select table_name,num_rows,blocks,num_rows/blocks from dba_tables where table_name='T2' and owner='SCOTT';

TABLE_NAME                       NUM_ROWS     BLOCKS NUM_ROWS/BLOCKS

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

T2                                 72881       1065      68.4328638

SQL> exec dbms_stats.gather_table_stats('SCOTT','T2');

PL/SQL procedure successfully completed.

SQL>  select table_name,num_rows,blocks,num_rows/blocks from dba_tables where table_name='T2' and owner='SCOTT';

TABLE_NAME                       NUM_ROWS     BLOCKS NUM_ROWS/BLOCKS

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

T2                                 62881       1065      59.0431925

SQL>

SQL> declare

i number;

begin

for i in 1..10000 loop

insert into t2(OWNER, OBJECT_NAME, SUBOBJECT_NAME, OBJECT_ID, DATA_OBJECT_ID, OBJECT_TYPE, CREATED, LAST_DDL_TIME, TIMESTAMP, STATUS,TEMPORARY,GENERATED,SECONDARY,NAMESPACE,EDITION_NAME)

values ('SCOTT', 'I_COBJ#', null, 30, 30, 'INDEX', to_date('07-07-2014 05:39:01', 'dd-mm-yyyy hh24:mi:ss'), to_date('07-07-2014 05:39:01', 'dd-mm-yyyy hh24:mi:ss'), '2014-07-07:05:39:01', 'VALID', 'N', 'N', 'N', 4, null);

end loop;

commit;

end;

/

PL/SQL procedure successfully completed.

SQL> select table_name,num_rows,blocks,num_rows/blocks from dba_tables where table_name='T2' and owner='SCOTT';

TABLE_NAME                       NUM_ROWS     BLOCKS NUM_ROWS/BLOCKS

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

T2                                  62881       1065      59.0431925

SQL>  exec dbms_stats.gather_table_stats('SCOTT','T2');

PL/SQL procedure successfully completed.

SQL> select table_name,num_rows,blocks,num_rows/blocks from dba_tables where table_name='T2' and owner='SCOTT';

TABLE_NAME                       NUM_ROWS     BLOCKS NUM_ROWS/BLOCKS

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

T2                                 72881       1065      68.4328638

这里可以看到数据库没有为新插入的数据分配新块,而是重用之前的数据块。这样节省了数据库的存储空间。这样也有一个问题,如果有大量的数据删除,没有新的数据插入,导致了大量的数据块空闲,如果是全表扫描的话,高水位下的许多块是无效的,做很多无用功。如果这种现象比较突出的话,则可以在业务空闲时段进行空间shrink或者表重建。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值