当前位置:  数据库>oracle

关于Oracle表碎片整理

    来源: 互联网  发布时间:2017-05-21

    本文导语: 数据库在日常使用过程中,不断的insert,delete,update操作,导致表和索引出现碎片是在所难免的事情,碎片多了,sql的执行效率自然就差了,道理很简单,高水位线(HWL)下的许多数据块都是无数据的,但全表扫描的时候要扫描...

数据库在日常使用过程中,不断的insert,delete,update操作,导致表和索引出现碎片是在所难免的事情,碎片多了,sql的执行效率自然就差了,道理很简单,高水位线(HWL)下的许多数据块都是无数据的,但全表扫描的时候要扫描到高水位线的数据块,也就是说Oracle要做许多的无用功!因此oracle提供了shrink space碎片整理功能。对于索引,可以采取rebuild online的方式进行碎片整理,一般来说,经常进行DML操作的对象DBA要定期进行维护,同时注意要及时更新统计信息!

关于Oracle表碎片整理相关附件

免费下载地址在 http://linux.linuxidc.com/

用户名与密码都是www.linuxidc.com

具体下载目录在 /2013年资料/5月/25日/关于Oracle表碎片整理
 
一:准备测试数据,使用HR用户,创建T1表,插入约30W的数据,并根据object_id创建普通索引,表占存储空间34M左右,索引占6M左右的存储空间

  • SQL> conn /as sysdba
  • 已连接。
  • SQL> select default_tablespace from dba_users where username='HR';
  • DEFAULT_TABLESPACE
  • ------------------------------------------------------------
  • USERS
  • SQL> conn hr/hr
  • 已连接。
  • SQL> insert into t1 select * from t1;
  • 已创建 74812 行。
  • SQL> insert into t1 select * from t1;
  • 已创建 149624 行。
  • SQL> commit;
  • 提交完成。
  • SQL> create index idx_t1_id on t1(object_id);
  • 索引已创建。
  • SQL> exec dbms_stats.gather_table_stats('HR','T1',CASCADE=>TRUE);
  • PL/SQL 过程已成功完成。
  • SQL> select count(1) from t1;
  • COUNT(1)
  • ----------
  • 299248
  • SQL> select sum(bytes)/1024/1024 from dba_segments where segment_name='T1';
  • SUM(BYTES)/1024/1024
  • --------------------
  • 34.0625
  • SQL> select sum(bytes)/1024/1024 from dba_segments where segment_name='IDX_T1_ID';
  • SUM(BYTES)/1024/1024
  • --------------------
  • 6
  •  

    二:估算表在高水位线下还有多少空间可用,这个值应当越低越好,表使用率越接近高水位线,全表扫描所做的无用功也就越少!

    DBMS_STATS包无法获取EMPTY_BLOCKS统计信息,所以需要用analyze命令再收集一次统计信息

  • SQL> SELECT blocks, empty_blocks, num_rows FROM user_tables WHERE table_name ='T1';
  • BLOCKS EMPTY_BLOCKS NUM_ROWS
  • ---------- ------------ ----------
  • 4302 0 299248
  • SQL> analyze table t1 compute statistics;
  • 表已分析。
  • SQL> SELECT blocks, empty_blocks, num_rows FROM user_tables WHERE table_name ='T1';
  • BLOCKS EMPTY_BLOCKS NUM_ROWS
  • ---------- ------------ ----------
  • 4302 50 299248
  • SQL> col table_name for a20
  • SQL> SELECT TABLE_NAME,
  • 2 (BLOCKS * 8192 / 1024 / 1024) -
  • 3 (NUM_ROWS * AVG_ROW_LEN / 1024 / 1024) "Data lower than HWM in MB"
  • 4 FROM USER_TABLES
  • 5 WHERE table_name = 'T1';
  • TABLE_NAME Data lower than HWM in MB
  • -------------------- -------------------------
  • T1 5.07086182
  • 三: 查看执行计划,全表扫描大概需要消耗CPU 1175

  • SQL> explain plan for select * from t1;
  • 已解释。
  • SQL> select * from table(dbms_xplan.display);
  • PLAN_TABLE_OUTPUT
  • --------------------------------------------------------------------------------
  • Plan hash value: 3617692013
  • --------------------------------------------------------------------------
  • | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
  • --------------------------------------------------------------------------
  • | 0 | SELECT STATEMENT | | 299K| 28M| 1175 (1)| 00:00:15 |
  • | 1 | TABLE ACCESS FULL| T1 | 299K| 28M| 1175 (1)| 00:00:15 |
  • --------------------------------------------------------------------------

  •     
     
     
     
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • ORACLE日期相关操作
  • Linux系统下Oracle的启动与Oracle监听的启动
  • ORACLE数据库常用字段数据类型介绍
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?
  • Oracle 12c的九大最新技术特性介绍
  • 网间Oracle的连接,远程连接Oracle服务器??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,