注册本站  论坛  繁體中文

电脑技巧
手机 | MP3 | MP4 | 显卡 | 主板 | 显示器 | 光存储 | 笔记本 | 网络设备 | 移动存储 | 数码相机
键鼠 | CPU | 音箱 | GPS | 电视 | 服务器 | 投影机 | 机箱电源 | 品牌电脑 | 办公打印 |
| 网站首页 | Cisco | Windows | Linux | Java | Dotnet | Oracle | 网页设计 | 平面设计 | 安全 | 软件应用 | 电脑维修 | 办公维修 |
您现在的位置: 电脑技巧 >> Oracle >> 性能调优 >> Oracle正文

Oracle利用MOVE压缩表的高水位线

文章来源:中国IT实验室整理 作者:杨廷琨 更新时间:2008-8-23 15:26:01 【 】 【加入收藏

  如果表的高水位线比较高,或者表经历了大数据量的产生操作,经常会使用ALTER TABLE MOVE的方法来减少占用的空间。

  不过今天才发现以前对MOVE的了解一直存在偏差。

  看一个简单的例子:

  两张表几乎一样大,而且都是空表。但是通过MOVE之后,得到的结果却完全不同。

     SQL> SELECT SEGMENT_NAME, BYTES/1024/1024/1024 G
  2 FROM USER_SEGMENTS
  3 WHERE SEGMENT_NAME LIKE 'T_BIG_TABLE%';
  SEGMENT_NAME G
  ------------------------------ ----------
  T_BIG_TABLE 1
  T_BIG_TABLE2 1.3125
  SQL> ALTER TABLE T_BIG_TABLE MOVE;

  表已更改。

    SQL> ALTER TABLE T_BIG_TABLE2 MOVE;

  表已更改。

     SQL> SELECT SEGMENT_NAME, BYTES/1024/1024/1024 G
  2 FROM USER_SEGMENTS
  3 WHERE SEGMENT_NAME LIKE 'T_BIG_TABLE%';
  SEGMENT_NAME G
  ------------------------------ ----------
  T_BIG_TABLE 1
  T_BIG_TABLE2 .000061035
  SQL> SELECT COUNT(*) FROM T_BIG_TABLE;
  COUNT(*)
  ----------
  0
  SQL> SELECT COUNT(*) FROM T_BIG_TABLE2;
  COUNT(*)
  ----------
  0

  造成这个现象的原因是由于T_BIT_TABLE表只包含的一个初始EXTENT,而这个EXTENT的大小是1G,而T_BIT_TABLE2则包含很多的64K大小的EXTENT。

   SQL> SET LONG 10000
  SQL> SELECT DBMS_METADATA.GET_DDL('TABLE', TABLE_NAME)
  2 FROM USER_TABLES
  3 WHERE TABLE_NAME LIKE 'T_BIG_TABLE%';
  DBMS_METADATA.GET_DDL('TABLE',TABLE_NAME)
  --------------------------------------------------------------------------------
  CREATE TABLE "YANGTK"."T_BIG_TABLE2"
  ( "ID" NUMBER,
  "NAME" VARCHAR2(30)
  ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "LOB_SPACE"
  CREATE TABLE "YANGTK"."T_BIG_TABLE"
  ( "ID" NUMBER,
  "NAME" VARCHAR2(30)
  ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 1073741824 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "LOB_SPACE"

  也就是说MOVE操作会根据原表的INITIAL大小为新表建立第1个EXTENT。MOVE不会自动减少表的初始扩展的大小。

  因此对于表T_BIG_TABLE这种情况,执行MOVE的时候应该指定新的存储参数:

     SQL> ALTER TABLE T_BIG_TABLE MOVE STORAGE (INITIAL 1M);

  表已更改。  

     SQL> SELECT SEGMENT_NAME, BYTES/1024/1024/1024 G
  2 FROM USER_SEGMENTS
  3 WHERE SEGMENT_NAME LIKE 'T_BIG_TABLE%';
  SEGMENT_NAME G
  ------------------------------ ----------
  T_BIG_TABLE .000976563
  T_BIG_TABLE2 .000061035

  • 上一篇Oracle:

  • 下一篇Oracle:
  • 最 新 热 门
     甲骨文:对开发者来说11g同样优秀
     Oracle许可证制度与审计的恶梦
     ORACLE 簇的详细介绍
     Oracle 10g新特性:利用外部表卸载数据
     Oracle 10g DBMS_SCHEDULER的中度解析
     Oracle10g新进程 MMON 和 MMNL
     如何在Oracle数据库中使用Java存储过程
     小议Oracle 11g的自治事务(六)
     小议Oracle 11g的自治事务(五)
     小议Oracle 11g的自治事务(四)
    最 新 推 荐
     Oracle 10G 启用闪回功能
     Oracle利用MOVE压缩表的高水位线
     Oracle语句优化30个规则详解
     Oracle面向商业银行的管理会计系统解决方案…
     Oracle中有关OSFA和数据仓库问题
     Oracle中有关Latch的介绍
     Oracle错误:数据泵导出时报错ORA-1422
     在Oracle中启用AutoTrace查看SQL执行计划
     ORA-00600: kmgs_pre_process_request_6
     如何使用exp以传输表空间的方式将其导出
    相 关 文 章

    Oracle许可证制度与审计的恶梦
    ORACLE 簇的详细介绍
    Oracle 10g新特性:利用外部表卸载数据
    Oracle 10g DBMS_SCHEDULER的中度解析
    Oracle10g新进程 MMON 和 MMNL
    如何在Oracle数据库中使用Java存储过程
    小议Oracle 11g的自治事务(六)
    小议Oracle 11g的自治事务(五)
    小议Oracle 11g的自治事务(四)
    Oracle 11g R1下的自动内存管理

    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告

     

    Copyright 2006-2008 pcjx.com All Rights Reserved
    电脑技巧 版权所有 粤ICP备06059145号 地图
    本网站所有内容未经许可不得转载或做其他使用