签到成功

知道了

CNDBA社区CNDBA社区

Oracle降低高水位

2021-09-13 17:50 2954 0 原创 oracle
作者: hbhe0316
1.创建测试表
SQL> create table t1 (id int);

Table created.


2.查看表占用的块数量
SQL> SELECT blocks, empty_blocks, num_rows FROM dba_tables WHERE table_name='T1';

    BLOCKS EMPTY_BLOCKS   NUM_ROWS
---------- ------------ ----------

3.对T1表做统计信息收集
SQL> ANALYZE TABLE T1 COMPUTE STATISTICS;

Table analyzed.


4.再次查看表占用的块数量
SQL> SELECT blocks, empty_blocks, num_rows FROM dba_tables WHERE table_name='T1';

    BLOCKS EMPTY_BLOCKS   NUM_ROWS
---------- ------------ ----------
     0          7      0

5.向表中插入1000W条数据
declare
i number;
begin
for i in 1..10000000 loop
 insert into t1 values(i);
end loop;
commit;
end;
/


6.查看表占用的块数量
SQL> SELECT blocks, empty_blocks, num_rows FROM dba_tables WHERE table_name='T1';

    BLOCKS EMPTY_BLOCKS   NUM_ROWS
---------- ------------ ----------
     0          7      0

7.统计信息收集
SQL> ANALYZE TABLE T1 COMPUTE STATISTICS;

Table analyzed.

8.再次查看表占用的块数量
SQL> SELECT blocks, empty_blocks, num_rows FROM dba_tables WHERE table_name='T1';

    BLOCKS EMPTY_BLOCKS   NUM_ROWS
---------- ------------ ----------
     15155        204   10000000

9.删除数据
SQL> delete from t1;

10000000 rows deleted.

SQL> commit;

Commit complete.


10.查看表占用的块数量
SQL> SELECT blocks, empty_blocks, num_rows FROM dba_tables WHERE table_name='T1';

    BLOCKS EMPTY_BLOCKS   NUM_ROWS
---------- ------------ ----------
     15155        204   10000000

11.统计信息收集
SQL> ANALYZE TABLE T1 COMPUTE STATISTICS;

Table analyzed.


12.再次查看表占用的块数量,可以看到
SQL> SELECT blocks, empty_blocks, num_rows FROM dba_tables WHERE table_name='T1';

    BLOCKS EMPTY_BLOCKS   NUM_ROWS
---------- ------------ ----------
     15155        204      0

13.降低高水位操作
SQL> alter table T1 move;

Table altered.


14.再次查看表占用的块数量
SQL> SELECT blocks, empty_blocks, num_rows FROM dba_tables WHERE table_name='T1';

    BLOCKS EMPTY_BLOCKS   NUM_ROWS
---------- ------------ ----------
     15155        204      0


15.再次收集统计信息
SQL> ANALYZE TABLE T1 COMPUTE STATISTICS;

Table analyzed.

16.查看表占用的块数量,可以看到执行alter table T1 move命令后,高水位已经下降了。
SQL> SELECT blocks, empty_blocks, num_rows FROM dba_tables WHERE table_name='T1';

    BLOCKS EMPTY_BLOCKS   NUM_ROWS
---------- ------------ ----------
     0          7      0

4种降低高水位的方法:

http://www.cndba.cn/hbhe0316/article/4712
http://www.cndba.cn/hbhe0316/article/4712http://www.cndba.cn/hbhe0316/article/4712http://www.cndba.cn/hbhe0316/article/4712http://www.cndba.cn/hbhe0316/article/4712http://www.cndba.cn/hbhe0316/article/4712http://www.cndba.cn/hbhe0316/article/4712http://www.cndba.cn/hbhe0316/article/4712http://www.cndba.cn/hbhe0316/article/4712http://www.cndba.cn/hbhe0316/article/4712

ANALYZE TABLE T1 COMPUTE STATISTICS;      分析表
SELECT blocks, empty_blocks, num_rows FROM dba_tables WHERE table_name='T1';   查询高水位线方法
 1:alter table T1 enable row movement;    开启行迁移(收缩表操做第一步)
 alter table T1 shrink space ;     收缩表空间
 alter table T1 disable row movement;   关闭行迁移方法 
 2:alter table T1 move;    移动表需要新建索引
 create Index new_index On T1(deptno);   单一索引
 create Index new_index  on T1(deptno,job);   复合索引方法 
 3:truncate table T1;  清空表方法 
 4:create table T1_NEW as select * from T1 where 1=2;
 创建新表alter table T1_NEW rename to T1;    重命名新表

版权声明:本文为博主原创文章,未经博主允许不得转载。

oracle,linux

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
hbhe0316

hbhe0316

关注

1.只有承认无知,才能装下新的东西; 2.进步来自一点点滴滴的积累; 3.广博让你更优秀,而专业让你无法替代; 4.挫折和失败能够转换为一种财富。

  • 889
    原创
  • 1
    翻译
  • 13
    转载
  • 24
    评论
  • 访问:1149500次
  • 积分:1523
  • 等级:核心会员
  • 排名:第6名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ