zoukankan      html  css  js  c++  java
  • oracle Lob对象空间回收测试

    备注:转自网络

    SQL> create table t(time date,text clob);
    SQL> begin
    for i in 1 .. 10000 loop
    insert into t values(sysdate,rpad('a', 4000, 'a'));
    commit;
    end loop;
    end;
    /

    SQL> select count(*) from t; --10000

    SQL> select table_name, column_name, segment_name, a.bytes from dba_segments a join dba_lobs b using (owner, segment_name) where b.table_name = 'T';
    TABLE_NAME COLUMN_NAME SEGMENT_NAME BYTES
    ------------------------------ -------------------- ------------------------------ ----------
    T TEXT SYS_LOB0000102100C00002$$ 83886080
    SQL> select sum(dbms_lob.getlength(text)) as bytes from t; --40000000
    SQL> delete from t;
    SQL> commit;
    SQL> select table_name, column_name, segment_name, a.bytes from dba_segments a join dba_lobs b using (owner, segment_name) where b.table_name = 'T';
    TABLE_NAME COLUMN_NAME SEGMENT_NAME BYTES
    ------------------------------ -------------------- ------------------------------ ----------
    T TEXT SYS_LOB0000102100C00002$$ 83886080
    SQL> select sum(dbms_lob.getlength(text)) as bytes from t; --输出为null
    可以看见删掉以后,空间没有释放,再次想表中插入10000跳记录。

    SQL> begin
    for i in 1 .. 10000 loop
    insert into t values(sysdate,rpad('a', 4000, 'a'));
    commit;
    end loop;
    end;
    /

    SQL> select table_name, column_name, segment_name, a.bytes from dba_segments a join dba_lobs b using (owner, segment_name) where b.table_name = 'T';
    TABLE_NAME COLUMN_NAME SEGMENT_NAME BYTES
    ------------------------------ -------------------- ------------------------------ ----------
    T TEXT SYS_LOB0000102100C00002$$ 167772160

    SQL> select sum(dbms_lob.getlength(text)) as bytes from t; --40000000
    SQL> delete from t;
    SQL> commit;

    TABLE_NAME COLUMN_NAME SEGMENT_NAME BYTES
    ------------------------------ -------------------- ------------------------------ ----------
    T TEXT SYS_LOB0000102100C00002$$ 167772160
    SQL> select table_name, column_name, segment_name, a.bytes from dba_segments a join dba_lobs b using (owner, segment_name) where b.table_name = 'T';
    SQL> select sum(dbms_lob.getlength(text)) as bytes from t; --输出为null
    ----------空间依然没有释放,下面释放空间。
    SQL> alter table t modify lob (text) (shrink space);
    SQL> select table_name, column_name, segment_name, a.bytes from dba_segments a join dba_lobs b using (owner, segment_name) where b.table_name = 'T';
    TABLE_NAME COLUMN_NAME SEGMENT_NAME BYTES
    ------------------------------ -------------------- ------------------------------ ----------
    T TEXT SYS_LOB0000102100C00002$$ 65536
    SQL> select sum(dbms_lob.getlength(text)) as bytes from t; --输出为null

    SQL> begin
    for i in 1 .. 10000 loop
    insert into t values(sysdate,rpad('a', 4000, 'a'));
    commit;
    end loop;
    end;
    /

    SQL> select table_name, column_name, segment_name, a.bytes from dba_segments a join dba_lobs b using (owner, segment_name) where b.table_name = 'T';
    TABLE_NAME COLUMN_NAME SEGMENT_NAME BYTES
    ------------------------------ -------------------- ------------------------------ ----------
    T TEXT SYS_LOB0000102100C00002$$ 83886080
    SQL> truncate table t;
    SQL> select table_name, column_name, segment_name, a.bytes from dba_segments a join dba_lobs b using (owner, segment_name) where b.table_name = 'T';
    TABLE_NAME COLUMN_NAME SEGMENT_NAME BYTES
    ------------------------------ -------------------- ------------------------------ ----------
    T TEXT SYS_LOB0000102100C00002$$ 65536
    可以看见truncate会释放空间。


    SQL> begin
    for i in 1 .. 10000 loop
    insert into t values(sysdate,rpad('a', 4000, 'a'));
    commit;
    end loop;
    end;
    /

    SQL> select table_name, column_name, segment_name, a.bytes from dba_segments a join dba_lobs b using (owner, segment_name) where b.table_name = 'T';
    TABLE_NAME COLUMN_NAME SEGMENT_NAME BYTES
    ------------------------------ -------------------- ------------------------------ ----------
    T TEXT SYS_LOB0000102100C00002$$ 83886080
    SQL> delete from t;
    SQL> commit;
    SQL> select table_name, column_name, segment_name, a.bytes from dba_segments a join dba_lobs b using (owner, segment_name) where b.table_name = 'T';
    TABLE_NAME COLUMN_NAME SEGMENT_NAME BYTES
    ------------------------------ -------------------- ------------------------------ ----------
    T TEXT SYS_LOB0000102100C00002$$ 83886080
    SQL> alter table t move lob(text) store as(tablespace tab1);
    SQL> select table_name, column_name, segment_name, a.bytes from dba_segments a join dba_lobs b using (owner, segment_name) where b.table_name = 'T';
    TABLE_NAME COLUMN_NAME SEGMENT_NAME BYTES
    ------------------------------ -------------------- ------------------------------ ----------
    T TEXT SYS_LOB0000102100C00002$$ 65536
    move表空间也会释放空间。

  • 相关阅读:
    jQuery对象初始化的多种传参数形式
    Ajax核心技术之XMLHttpRequest
    【转载】神奇的css属性pointer-events
    JavaScript学习笔记——错误处理
    jquery validate的漂亮css样式验证
    JavaScript Math和Number对象研究
    《JavaScript语言精粹》笔记
    HTML5版的String Avoider小游戏
    IE11 F12工具报错
    css之图片羽化处理
  • 原文地址:https://www.cnblogs.com/zfox2017/p/6991514.html
Copyright © 2011-2022 走看看