alter table move的用途
降低HWM,消除行移植和行链接。
我们可以通过user_segments 或 user_extents 的blocks来查看hwm
SQL> select segment_name,blocks
2 from user_segments
3 where
segment_name='SMTDZ';
SEGMENT_NAME
BLOCKS
---------------- ----------
SMTDZ
16
在usr_extents中查找
SQL>
select segment_name,blocks
2 from user_extents where
segment_name='SMTDZ';
SEGMENT_NAME
BLOCKS
---------------- ----------
SMTDZ
8
SMTDZ
8
SQL> select count(*) from smtdz;
COUNT(*)
----------
1015
SQL> insert into smtdz select * from smtdz;
已创建1015行。
SQL> commit;
提交完成。
SQL> select count(*) from smtdz;
COUNT(*)
----------
2030
SQL> select segment_name,blocks
2 from user_segmentS
3 where
segment_name='SMTDZ';
SEGMENT_NAME
BLOCKS
---------------- ----------
SMTDZ
24
SQL> select segment_name,blocks from user_extents where segment_name='SMTDZ';
SEGMENT_NAME
BLOCKS
---------------- ----------
SMTDZ
8
SMTDZ
8
SMTDZ
8
可以看到当我们insert into smtdz 一批数据后其blocks增加了,我们再对smtdz进行delete下
SQL> delete from smtdz where rownum<1001;
已删除1000行。
SQL> commit;
提交完成。
SQL> select count(*) from smtdz;
COUNT(*)
----------
1030
未对表smtdz进行分析analyze前
SQL> select
segment_name,blocks
2 from user_segments
3 where
segment_name='SMTDZ';
SEGMENT_NAME
BLOCKS
---------------- ----------
SMTDZ
24
对表smtdz进行分析
SQL> exec dbms_stats.gather_table_stats(ownname=>'IC',tabname=>'SMTDZ');
PL/SQL 过程已成功完成。
SQL> select segment_name,blocks
2 from user_segments
3 where
segment_name='SMTDZ';
SEGMENT_NAME
BLOCKS
---------------- ----------
SMTDZ
24
可见分析表只是修改了user_tables里的num_rows值,对hwm并没有影响
SQL> alter table smtdz move;
表已更改。
SQL> select segment_name,blocks
2 from user_segments
3 where
segment_name='SMTDZ';
SEGMENT_NAME
BLOCKS
---------------- ----------
SMTDZ
16
从这里可以看到表smtdz的hwm发生了变化,现在只有16个blocks了
我们可以用下面的办法来最方便的进行重组,消除row
migration:
SQL> alter table t add t1 date default sysdate;
Table altered.
SQL> c/t1/t2
1* alter table t add t2 date default sysdate
SQL> /
Table altered.
SQL> c/t2/t3
1* alter table t add t3 date default sysdate
SQL> /
Table altered.
SQL> analyze table t compute statistics;
Table analyzed.
SQL> select table_name,num_rows,CHAIN_CNT from user_tables where
table_name='T';
TABLE_NAME
NUM_ROWS
CHAIN_CNT
------------- ---------------
----------
T
41616
3908
SQL> alter table t move ;
Table altered.
SQL> analyze table t compute statistics;
Table analyzed.
SQL> select table_name,num_rows,CHAIN_CNT from user_tables where
table_name='T';
TABLE_NAME
NUM_ROWS
CHAIN_CNT
------------- ---------------- ------------
T
41616
0
posted on 2015-11-11 11:04 duoduo1152 阅读(278) 评论(0) 收藏 举报
浙公网安备 33010602011771号