oracle表碎片整理

来源:互联网 发布:淘宝能代理几个分销商 编辑:程序博客网 时间:2024/05/24 02:57

alter table scott.t1 enable row movement;

含义:
行迁移,意思就是,一个现存的行允许改变其rowid(物理存储地址),通常情况下,数据行在分配了空间之后,行的rowid就固定了,即使以后行长度超出预留的空间,也不会将其移动,在长数据行的情况下,表会产生行链接,对于io来说,行链接是不利的,为了性能,就需要将行调整为在单个物理存储地址下能保存行的所有信息,这需要行迁移.另外在flashback的时候,由于原始版本的行占据了相应的物理地址,所以,也需要行迁移.
其它的,比如说在收缩段空间的情况下,由于要把所有段数据向段前挤压,大部分行都需要改变其物理地址.也需要行迁移

alter table shrink 的用法及与alter table move的区别 ,对随便整理的补充:
http://pandarabbit.blog.163.com/blog/static/20928414420132193756219/
碎片完执行:alter table t1 disable  ROW MOVEMENT;

以下为测试sql:
--收集表信息
exec dbms_stats.gather_table_stats('JOINSPIDER','TB_SPIDER_INFO_LOG',CASCADE=>TRUE);

--得到表、索引大小
select sum(bytes)/1024/1024 from user_segments where segment_name='TB_SPIDER_INFO_LOG';
select sum(bytes)/1024/1024 from user_segments where segment_name='SIL_SPIDER_INFO_CODE_INDEX';
select sum(bytes)/1024/1024 from user_segments where segment_name='SIL_START_TIME_INDEX';

--得到表的块信息
SELECT blocks, empty_blocks, num_rows FROM user_tables WHERE table_name ='TB_SPIDER_INFO_LOG';

--分析empty_blacks
analyze table TB_SPIDER_INFO_LOG compute statistics;

analyze table 一般可以指定分析: 表,所有字段,所有索引字段,所有索引。 若不指定则全部都分析。

oracle8i开始﹐analyze语句和dbms_stats包都可以收集相关对象(TablesIndexesClusters and Materialized Views)statistics

1.analyze table t1 compute statistics for table;  -->user_tables

(只对表的总体信息进行统计,比如行数多少等,不涉及到表字段)

 

2.analyze table t2 compute statistics for all columns;  -->user_tab_columns

(只会收集表字段信息)

 

3.analyze table t3 compute statistics for all indexed columns; -->user_tab_columns

(只会收集表中索引所在的字段信息)

 

4.analyze table t4 compute statistics for all indexes;à user_indexes

(只收集表索引的信息)

5.analyze table t5 compute statistics;

(收集表,表字段,索引的信息)

 



--得到高水位线信息,越大越差
SELECT TABLE_NAME, (BLOCKS * 8192 / 1024 / 1024) - (NUM_ROWS * AVG_ROW_LEN / 1024 / 1024) "Data lower than HWM in MB"
FROM USER_TABLES
WHERE table_name = 'TB_SPIDER_INFO_LOG';

--全表扫描消耗的时间
explain plan for select * from TB_SPIDER_INFO_LOG;
select * from table(dbms_xplan.display);

--锁片整理
alter table TB_SPIDER_INFO_LOG enable row movement;
alter table TB_SPIDER_INFO_LOG shrink space cascade;
alter table TB_SPIDER_INFO_LOG disable row movement;

--碎片整理后再执行一次:
exec dbms_stats.gather_table_stats('JOINSPIDER','TB_SPIDER_INFO_LOG',CASCADE=>TRUE);
analyze table TB_SPIDER_INFO_LOG compute statistics;

然后各项指标会迅速提升。

0 0
原创粉丝点击