oracle作为一种大型数据库,广泛应用于金融、邮电、电力、民航等数据吞吐量巨大,计算机网络广泛普及的重要部门。对于系统管理员来讲,如何保证网络 稳定运行,如何提高数据库性能,使其更加安全高效,就显得尤为重要。作为影响数据库性能的一大因素--数据库碎片,应当引起dba的足够重视,及时发现并 整理碎片乃是dba一项基本维护内容。  
    ---- 1、碎片是如何产生的

---- 当生成一个数据库时,它会分成称为表空间(tablespace)的多个逻辑段(segment),如系统(system)表空间,临时 (temporary)表空间等。一个表空间可以包含多个数据范围(extent)和一个或多个自由范围块,即自由空间(free space)。

---- 表空间、段、范围、自由空间的逻辑关系如下:

---- 当表空间中生成一个段时,将从表空间有效自由空间中为这个段的初始范围分配空间。在这些初始范围充满数据时,段会请求增加另一个范围。这样的扩展过程会一 直继续下去,直到达到最大的范围值,或者在表空间中已经没有自由空间用于下一个范围。最理想的状态就是一个段的数据可被存在单一的一个范围中。这样,所有 的数据存储时靠近段内其它数据,并且寻找数据可少用一些指针。但是一个段包含多个范围的情况是大量存在的,没有任何措施可以保证这些范围是相邻存储的,如 图〈1〉。当要满足一个空间要求时,数据库不再合并相邻的自由范围(除非别无选择), 而是寻找表空间中最大的自由范围来使用。这样将逐渐形成越来越多的离散的、分隔的、较小的自由空间,即碎片。

---- 2、碎片对系统的影响

---- 随着时间推移,基于数据库的应用系统的广泛使用,产生的碎片会越来越多,将对数据库有以下两点主要影响:

---- (1)导致系统性能减弱

---- 如上所述,当要满足一个空间要求时,数据库将首先查找当前最大的自由范围,而"最大"自由范围逐渐变小,要找到一个足够大的自由范围已变得越来越困难,从而导致表空间中的速度障碍,使数据库的空间分配愈发远离理想状态;

---- (2)浪费大量的表空间

---- 尽管有一部分自由范围(如表空间的pctincrease为非0)将会被smon(系统监控)后台进程周期性地合并,但始终有一部分自由范围无法得以自动合并,浪费了大量的表空间。

---- 3、自由范围的碎片计算

---- 由于自由空间碎片是由几部分组成,如范围数量、最大范围尺寸等,我们可用fsfi--free space fragmentation index(自由空间碎片索引)值来直观体现:  
    fsfi=100*sqrt(max(extent)/sum(extents))*1/sqrt(sqrt(count(extents)))

---- 可以看出,fsfi的最大可能值为100(一个理想的单文件表空间)。随着范围的增加,fsfi值缓慢下降,而随着最大范围尺寸的减少,fsfi值会迅速下降。
  
    ---- 下面的脚本可以用来计算fsfi值:  
    rem    fsfi value compute 
    rem    fsfi.sql 
    column fsfi format 999,99 
    select tablespace_name,sqrt(max(blocks)/sum(blocks))* 
           (100/sqrt(sqrt(count(blocks)))) fsfi 
    from dba_free_space 
    group by tablespace_name order by 1; 
    spool fsfi.rep; 
    / 
    spool off;

---- 比如,在某数据库运行脚本fsfi.sql,得到以下fsfi值:  
    tablespace_name                   fsfi 
    ------------------------------ ------- 
    rbs                              74.06 
    system                          100.00 
    temp                             22.82 
    tools                            75.79 
    users                           100.00 
    user_tools                      100.00 
    ydcx_data                        47.34 
    ydcx_idx                         57.19 
    ydjf_data                        33.80 
    ydjf_idx                         75.55

---- 统计出了数据库的fsfi值,就可以把它作为一个可比参数。在一个有着足够有效自由空间,且fsfi值超过30的表空间中,很少会遇见有效自由空间的问题。当一个空间将要接近可比参数时,就需要做碎片整理了。  
    ---- 4、自由范围的碎片整理

---- (1)表空间的pctincrease值为非0

---- 可以将表空间的缺省存储参数pctincrease改为非0。一般将其设为1,如:  
       alter tablespace temp 
       default storage(pctincrease 1);

---- 这样smon便会将自由范围自动合并。也可以手工合并自由范围:  
       alter tablespace temp coalesce;

---- 5、段的碎片整理  
    ---- 我们知道,段由范围组成。在有些情况下,有必要对段的碎片进行整理。要查看段的有关信息,可查看数据字典dba_segments,范围的信息可查看数据 字典dba_extents。如果段的碎片过多, 将其数据压缩到一个范围的最简单方法便是用正确的存储参数将这个段重建,然后将旧表中的数据插入到新表,同时删除旧表。这个过程可以用 import/export(输入/输出)工具来完成。

---- export()命令有一个(压缩)标志,这个标志在读表时会引发export确定该表所分配的物理空间量,它会向输出转储文件写入一个新的初始化存储参 数--等于全部所分配空间。若这个表关闭, 则使用import()工具重新生成。这样,它的数据会放入一个新的、较大的初始段中。例如: 
    exp user/password file=exp.dmp compress=y grants=y indexes=y 
        tables=(table1,table2);

---- 若输出成功,则从库中删除已输出的表,然后从输出转储文件中输入表: 
    imp user/password file=exp.dmp commit=y buffer=64000 full=y

---- 这种方法可用于整个数据库。

ORACLE表空间碎片整理相关推荐

  1. oracle 表空间 碎片,Oracle表空间碎片整理

    作为影响数据库性能的一个因素,数据库表空间碎片,应当引起DBA的重视,及时发现并整理碎片是DBA基本维护内容,以提高数据库性能. Oracle数据库表空间.段.区.块简述 表空间(tablesapce ...

  2. MySQL表空间碎片整理

    MySQL可以使用alter table tn engine=innodb语句进行表空间碎片整理.而页内记录并不是物理有序的,并且删除记录后,被删除的记录放到页内free链表,可能会产生很多空洞.al ...

  3. Oracle表空间碎片查询以及整理

    一.查看表空间碎片的方法 查看fsfi值 /* Formatted on 2017/9/21 13:42:29 (QP5 v5.240.12305.39476) */ select a.tablesp ...

  4. Oracle表空间的管理方式(LMT、DMT)--本地和字典管理

    Oracle表空间的管理方式(LMT.DMT)--本地和字典管理 字典管理:oracle 8i(不包括i),只存在一种表空间的管理模式,即字典管理表空间(DMT).DMT是指oracle的空间分配或回 ...

  5. Oracle表空间_PK是什么意思,Oracle表空间详解

    关键字:Oracle表空间详解 一.============  查询 =================== 1.查询oracle用户的默认表空间和临时表空间 select default_table ...

  6. oracle表空间于表数据啥意思,初识Oracle表空间与数据文件

    初识Oracle表空间与数据文件,描述oracle数据库的逻辑结构,创建表空间,改变表空间大小,为临时段分配空间,改变表空间状态,改 学习目标 1.描述Oracle数据库的逻辑结构 2.创建表空间 3 ...

  7. oracle 删除空间不足,oracle表空间扩容、创建、删除(解决表空间不足问题)

    前言 整理一下之前使用oracle数据库遇到的表空间不足的问题,顺便水个博客. oracle表空间操作语句 1.改变已存在的数据文件的大小 ALTER TABLESPACE app_data ADD ...

  8. Oracle 表空间与数据文件

    --============================== --Oracle 表空间与数据文件 --============================== /* 一.概念 表空间:是一个或 ...

  9. Oracle表空间大小的限制和DB_BLOCK_SIZE的概念

    Oracle表空间大小的限制和DB_BLOCK_SIZE的概念 之前接触的项目表空间最大也不超过10G,所以导入数据库时一直使用导入本地的oracle数据库文件的方法,即根据dmp文件大小设置一个数据 ...

  10. 清除mysql数据碎片_MySQL 清除表空间碎片方法总结

    mysql数据库会生成空间碎片了,这些空间碎片对于我们来讲影响不大但如果空间碎片多了会导致mysql查询缓存了,下面一起来看MySQL 清除表空间碎片方法吧,具体的如下所示. 碎片产生的原因 (1)表 ...

最新文章

  1. java接口深入理解,深入理解Java接口
  2. case实现shell菜单功能
  3. 3.25 for循环
  4. C语言实现希尔排序shell sort算法之一(附完整源码)
  5. 最长子串(FZU2128)
  6. 如何批量将 Txt 文本文档转换为 docx 格式的 Word 文档
  7. 浅谈企业信息化规划建设
  8. 使用Simian进行重复代码检测
  9. 用js企业微信推送通知
  10. 思科模拟器交换机的基本配置
  11. Activiti 设置工作代理人
  12. 用python爬取网易云评论最多的歌_巧用Python爬取网易云音乐歌曲全部评论
  13. 京东数科前端岗位面历
  14. 搭建nlp_server服务器
  15. SSM集成支付宝(沙箱环境)
  16. 【Android Gradle 插件】DexOptions 配置 ② ( additionalParameters 属性配置 | dx 工具 | dx 附加参数 )
  17. 快排为什么不稳定 举例说明
  18. iStylePDF安全电子文档解决方案之电子合同在线订立
  19. 通过国产化低代码平台搭建设备管理系统,助力中国航天企业信息化建设
  20. tilemap 导入unity_unity的Tilemap学习笔记

热门文章

  1. 第2章-10 输出华氏-摄氏温度转换表
  2. 计算机软件著作权申请条件有哪些
  3. size-constrained-clustering
  4. PCB表面贴片元件的手工焊接技巧
  5. 用javascript实现一个打乱文字小程序
  6. 【Tableau Desktop 企业日常问题29】Tableau desktop 更换电脑的时候 迁移License
  7. springboot启动报错@Bean definition illegally overridden by existing bean definition
  8. excel报表汇总工具
  9. 服务器系统怎么设置从光盘启动,电脑BIOS怎么设置光盘启动 三种类型BIOS设置光驱启动的图文详解教程...
  10. android读取剪切板的方法,Android10中获取剪切板内容