降低高水位线

前端之家收集整理的这篇文章主要介绍了降低高水位线前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

1、建立初始化数据演示数据表中的高水位的变化

@H_403_2@(1)、建立用户和表

@H_403_2@SYS@odb>create user test8 identified by test8;

@H_403_2@SYS@odb>grant connect,resource to test8;

@H_403_2@SYS@odb>conn test8/test8

@H_403_2@TEST8@odb>create table gaoshuiwei as select * from all_objects;

@H_403_2@TEST8@odb>select TABLE_NAME,NUM_ROWS,BLOCKS from user_tables where table_name='GAOSHUIWEI';

@H_403_2@TABLE_NAME NUM_ROWS BLOCKS

@H_403_2@---------------------------------------- ----------

@H_403_2@GAOSHUIWEI 68309 500

@H_403_2@

@H_403_2@TEST8@odb>delete from gaoshuiwei;

@H_403_2@TEST8@odb>commit;

@H_403_2@TEST8@odb>select count(*) from gaoshuiwei;

@H_403_2@ COUNT(*)

@H_403_2@----------

@H_403_2@ 0

@H_403_2@

@H_403_2@TEST8@odb>select TABLE_NAME,BLOCKS from user_tables wheretable_name='GAOSHUIWEI';

@H_403_2@TABLE_NAME NUM_ROWS BLOCKS

@H_403_2@---------------------------------------- ----------

@H_403_2@GAOSHUIWEI 68309 500

@H_403_2@

@H_403_2@可以看到在删除表中的数据后,在user_tables里面该表还是有68309行和500个快大约8M左右;

@H_403_2@(2)、在次插入数据

@H_403_2@TEST8@ odb>insert intogaoshuiwei select * from all_objects;

@H_403_2@TEST8@ odb>commit;

@H_403_2@TEST8@ odb>select count(*) fromgaoshuiwei;

@H_403_2@COUNT(*)

@H_403_2@----------

@H_403_2@ 68309

@H_403_2@TEST8@ odb>selectTABLE_NAME,BLOCKS from user_tables where table_name='GAOSHUIWEI';

@H_403_2@TABLE_NAME NUM_ROWS BLOCKS

@H_403_2@---------------------------------------- ----------

@H_403_2@GAOSHUIWEI 68309500

@H_403_2@TEST8@ odb>delete fromgaoshuiwei;

@H_403_2@68309 rows deleted.

@H_403_2@TEST8@ odb>commit;

@H_403_2@Commit complete.

@H_403_2@TEST8@ odb>selectTABLE_NAME,BLOCKS from user_tables where table_name='GAOSHUIWEI';

@H_403_2@TABLE_NAME NUM_ROWS BLOCKS

@H_403_2@---------------------------------------- ----------

@H_403_2@GAOSHUIWEI 68309 500

@H_403_2@

@H_403_2@看到信息没什么变化,需要搜集统计信息;

@H_403_2@TEST8@odb>

@H_403_2@execdbms_stats.gather_table_stats('TEST8','GAOSHUIWEI',cascade=>true);

@H_403_2@PL/sql procedure successfullycompleted.

@H_403_2@

@H_403_2@TEST8@ odb>selectTABLE_NAME,BLOCKS from user_tables where table_name='GAOSHUIWEI';

@H_403_2@TABLE_NAME NUM_ROWS BLOCKS

@H_403_2@---------------------------------------- ----------

@H_403_2@GAOSHUIWEI 0 500

@H_403_2@

@H_403_2@

@H_403_2@TEST8@ odb>selectsegment_name,segment_type,bytes from user_segments wheresegment_name='GAOSHUIWEI'; //查看段的信息

@H_403_2@SEGMENT_NAME SEGMENT_TYPE BYTES

@H_403_2@-------------------------------------- ----------

@H_403_2@GAOSHUIWEI TABLE 8388608

@H_403_2@

@H_403_2@块500 大约8M左右, 生成执行计划:

@H_403_2@

@H_403_2@TEST8@odb>explain plan for select count(*) from gaoshuiwei;

@H_403_2@Explained.

@H_403_2@TEST8@odb>select * from table(dbms_xplan.display);

@H_403_2@该表是0行数据 ,全表扫描,cost 189 ;原因是因为的该表来回的插入删除,高水位线一直没有降下来,还会扫描500个块,全部扫描一遍返回结果,如果发现表的数据不大,但是查询很慢,可能和高水位有关

@H_403_2@可采用

@H_403_2@方法(1)、使用truncate 方法

@H_403_2@方法(2)、使用移动表空间的方法

@H_403_2@方法(3)、使用收缩表空间的方法

@H_403_2@

@H_403_2@TEST8@ odb>alter table gaoshuiwei enablerow movement; //启用行移动

@H_403_2@TEST8@ odb>alter table gaoshuiwei shrinkspace compact; //压缩表的空间,这时还没发生变化

@H_403_2@TEST8@ odb>alter table gaoshuiwei shrinkspace; //降低表的高水位线这时变化就比较明显了

@H_403_2@对索引也可以设置同样的操作

@H_403_2@alter indexPUB_LOG_PK shrink space compact;

猜你在找的Oracle相关文章