利用在线重定义降低表的高水位线

 

近日对某个线上库的表进行归档,原来有将近2千万条记录,归档后只剩不到400万,但是由于应用程序要对该表进行全表扫描,sql执行代价并没有降低。
决定使用在线重定义来降低其高水位线。
第一步:
建立中间表
-- Create table
create table justin_temp
(
  ID                    NUMBER(18) not null,
  SEND_TO               VARCHAR2(100),
  SUBJECT               VARCHAR2(200),
  CONTENT               VARCHAR2(4000),
  IS_SEND               NUMBER(1) default 0 not null,
  FAILED_AMOUNT         NUMBER(5) default 0 not null,
)


alter table justin_temp
  add constraint PK_JUSTIN_ID primary key (ID)
  using index;
第二步
执行在线重定义
SQL> begin
  2    dbms_redefinition.can_redef_table(uname => user,tname => 'justin');
  3  end;
  4  /
 
PL/SQL procedure successfully completed
 
SQL> begin
  2    dbms_redefinition.start_redef_table(uname => user,orig_table => 'justin',int_table => 'justin_TEMP');
  3  end;
  4  /
 
PL/SQL procedure successfully completed
 
SQL> begin
  2    dbms_redefinition.finish_redef_table(uname => user,orig_table => 'justin',int_table => 'justin_TEMP');
  3  end;
  4  /
 
PL/SQL procedure successfully completed

重定义之前表的统计信息

SQL> select num_rows,blocks from dba_tables where table_name='justin';
 
  NUM_ROWS     BLOCKS
---------- ----------
  3590554     570348

SQL> select header_file,header_block,bytes,blocks from dba_segments where segment_name='justin';
 
HEADER_FILE HEADER_BLOCK      BYTES     BLOCKS
----------- ------------ ---------- ----------
         15          107 4680843264     571392

重定义之后
SQL> select num_rows,blocks from dba_tables where table_name='justin';
 
  NUM_ROWS     BLOCKS
---------- ----------
   3590554     135412

SQL> select header_file,header_block,bytes,blocks from dba_segments where segment_name='justin';
 
HEADER_FILE HEADER_BLOCK      BYTES     BLOCKS
----------- ------------ ---------- ----------
         15       777323 1140850688     139264
由此大致可以估算出,此后每次全表扫描代价应该会是原来的1/4左右


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值