Oracle数据库空间的使用和管理_第1页
Oracle数据库空间的使用和管理_第2页
Oracle数据库空间的使用和管理_第3页
Oracle数据库空间的使用和管理_第4页
Oracle数据库空间的使用和管理_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.:.;一篇比较不错的文章,但是比较长,呵呵看他有没有耐心了! 数据库空间的有效运用和维护不仅是数据库管理的重要任务,也是大多数开发人员所关怀的内容,由于它直接关系到数据库性能的发扬。同时数据碎片是经常令人头疼的问题,碎片不仅呵斥空间的浪费,更重要的是会直接影呼应 用程序的呼应速度。 Oracle提供了不少方法用于数据空间的运用、监控和维护,同时也在各版本中陆续对这方面的功能进展了加强,目的在于简化这方面任务的复杂度,提高运用的运转效率。 本文希望经过系统地引见这方面的有关概念,让大家能更好地规划运用数据空间,正确运用Oracle提供的有关功能特性,提高运用的执行效率。 一、有关概念 数据库的

2、空间在逻辑上分为多个表空间,每个表空间那么由系统中的一个或多个物理数据文件构成;Oracle存储数据的根本单位是块,其大小在建库时由 DB_BLOCK_SIZE参数确定,一个或多个延续的块构成一个区片EXTENT,它作为数据对象存储的根本单位来运用。在Oracle中,每个基 本数据对象运用的空间称为段Segment,段存放在独一的表空间上,每个段实践上是一系列区片更为准确地是数据块的集合。每个简单数据对象对应 一个段;对于分区对象如分区表、索引,那么每个子分区对应一个段,由各个子分区共同构成一个完好的数据对象。因此,可以把表空间看作桶,里面放着许 多段;一个段只能放在一个桶中,而不能跨越多个桶

3、。 二、表空间的运用 表空间碎片的产生 由于同一个表空间中存放有多个数据段,各个数据段可以有不同的区片尺寸,不同段的区片可以交叉存放;当这些段中的区片经过分配如创建表、释放 如删除表后,就能够使表空间中本来延续的空闲数据块变成不延续,而区片必需由延续的数据块构成,这时,当某一段需求分配新的区片时,就有能够出现虽然 表空间空闲数据块的总和大于所需区片的大小,但却无法找到一串延续的块来供此区片分配运用。这种情况就称为表空间的Extent Fragmentation。我们经常会遇到这种情况,明明从DBA_FREE_SPACE中计算表空间还有几百MB,但其中的某一个表却无法再扩展几个 MB的空间。 消

4、除表空间碎片 Oracle在段的区片分配上为用户提供了很大的灵敏性,然而假设未能正确运用创建表空间和数据对象的各个可选择参数,那么在最后将不可防止的要面 对区片碎片的问题。Oracle 的Bhaskar Himatsingka 和 Juan Loaiza,为此提出了SAFESimple Algorithm for Fragmentation Elimination.配制规那么,经过遵照这套规那么,区片级碎片可以完全的防止。而实践上,Oracle8i引入的新特性:Local Managed Tablespace就是SAFE规那么在Oracle Server的内置实现。SAFE原那么概括起来包括:

5、 1. 对每个表空间上的段运用一样的区片尺寸;段参数INITIALNEXT,PCTINCREASE0;可以经过运用Create Tablespace 的 MINIMUM EXTENT 子句来确保分配的区片是此参数的倍数; 2. 仅在表空间级指定INITIAL、NEXT参数,在创建数据段时不要指定这些参数; 3. 区片的大小根据段大小来确定,原那么是平衡顺序扫描的效率和空间的利用率,同时确保段的区片数目控制在1024之下;根据此原那么,在进展相应测试之后,确定以下区片选取规那么: 段大小Oracle7 区片大小Oracle7 段大小Oracle8 区片大小Oracle8 &160M 160K &

6、128M 128K 160M-5G 5M 128M-4G 4M &5G 160M &4G 128M 有此数据库中可以只运用三种区片大小的表空间;在对象创建之前需对其大小进展评价,并放到相应的表空间中; 4. Oracle815引入了本地管理表空间,它在管理和性能上都优于传统的字典管理表空间,它已交融了规那么1、2、3 ;要运用此特性,在CREATE TABLESPACE语句中指定EXTENT MANAGEMENT LOCAL子句; 5. 段的区片数目上限应在4096之下,DML操作在此区片数目范围内不会有明显的性能差别;但某些DDL操作的速度那么与区片的数目关系较大;因此合理的区片数目应坚持在

7、1024之下;对于继续不断扩展的段,应监控区片数目,在必要时移至其它表空间; 6. 对于特别大的数据段应控制在4G128GOracle7为5G160G之间,它们应存放到单独的表空间上,同时对于这些特大段应思索运用分区拉提高性能; 7. 用户的暂时表空间应运用TEMPORARY类型; 8. 当系统的事务规模比较平衡时可以对回滚段运用OPTIMAL参数,否那么应防止制定OPTIMAL参数,而定期监控回滚段的大小,并在必要时重建; 9. 暂时段和回滚段绝对不要将用户数据存放到SYSTEM表空间,它是专为永远不会Drop和Truncate的系统数据对象而设计的; 10. 创建表空间时指定数据文件的大小

8、应区片整数倍1数据块,对于Local Managed Tablespace那么为区片整数倍64K; 11. 当表空间运用一致的区片大小时,不要对其进展空间整理,重整的结果不仅耗费精神而且能够会使性能变差;对于未运用一致的区片尺寸的表空间应经过Export/Import重整; 12. 8i 提供了Alter Table Move Tablespace命令可用于快速重整表,Alter Index RebuildTablespace 命令可用于快速重建索引; 有关运用单个区片的误导 在许多关于碎片整理的文档中建议在Export时运用CompressY选项,将表中的一切数据调整到一个区片中,期望在Im

9、port后获得良 好性能。由此让许多人产生一个观念,以为当表中数据全部存放到一个区片中时,可以获得良好性能。实践上单区片段只在以下条件成立时,才具有优越性: 数据主要以全段扫描方式访问; 段所对应的数据块在物理磁盘上延续存放,Oracle可以发布较大的顺序磁盘读操作; 经过对这两条进展分析可以发现,一方面数据库中大部分表是经过索引来访问,另一方面如今的数据库文件普通在物理上运用了RAID5或RAID0 1技术,数据以条带化方式分布到多个物理磁盘上,逻辑上的单个区片和多区片在物理上并无本质上的区别;另外,从Oracle的角度来看,管理几百个区片的 段是非常轻松的并不会有性能的下降。由此可见将整个

10、段放到一个区片中并无明显益处,而这种做法却会导致表空间碎片的产生。 三、表数据段的运用 表空间的组织 Heap表的空间由一系列区片链接而成,每个数据块除块头外其他部分可用于存放数据,在创建表时可以指定以下参数: PCTFREE:块中保管用于UPDATE操作的空间百分比,当数据占用的空间到达此上限时,新的数据将不能再插入到此块中; PCTUSED:指定块中数据运用空间的最低百分比;当一个块在到达PCTFREE,之后阅历了一些DELETE操作,在其空间运用下降到PCTUSED后便可以重新被用于INSERT数据;这就是PCTFREE/PCTUSED参数的含义; 调整PCTFREE、PCTUSED参数

11、的目的一方面是提高性能,另一方面那么主要是提高空间运用效率,防止出现块中存在有许多未用的空间,但却无法找到一个块可以被用于插入新数据行的情况发生。 PCTFREE的运用 在Oracle中表的每一行数据由独一的ROWID标志;而Oracle支持的数据类型中有一些长度是可变的,如VARCHAR,当对这些数据进 行UPDATE时,假设块中的可用空间不能包容UPDATE后的数据行时,Oracle将会把此行移到其它数据块,同时保管此数据行的ROWID不变,并 在原有块中建一指针指向行迁移后的位置。在这种情况下读取一行数据将需求访问2个数据块,从而导致性能下降。PCTFREE保管的空间就是为确保更改后的

12、数据行可以仍存放于原有数据块中,防止行迁移的情况发生。 由此,假设PCTFREE设置缺乏时能够产生行迁移;而另一方面假设PCTFREE设置过高,将会呵斥空间浪费。因此正确设置PCTFREE需求 对表中数据的运用进展分析。对于数据长度不会变化或极少更新的情况,可以采用较小的PCTFREE;对于其它大多数情况应采用稍大的PCTFREE PCTFREE的缺省值是10,假设不好估计需预留的空间,可以运用1525的范围,不要为节约块中的空间而运用较小的PCTFREE值。 PCTUSED的运用 当块的运用的空间下降到PCTUSED后,此块被重新放回空闲链表Freelist中,作为后续Insert的候选块。

13、同样,设置 PCTUSED需求视数据行的特性和Insert、Update、Delete的方式而定,但必需遵守的原那么是:db_block_size * (100 - PCTFREE - PCTUSED)必需比行的长度大。 对于数据行长度变化较大的情况,应运用最大行长度来计算PCTUSED,并且应运用较低的PCTUSED值。由于在执行Insert时,假设数据 块的可用空间不能装下一行数据,当块的运用的空间是在PCTUSED之上,Oracle将把此块从Freelist中移走;当块的运用的空间是在 PCTUSED之下,Oracle将会扩展段空间。因此,PCTUSED假设设得过高,将导致段的不断扩展。

14、 当数据行长度不大时,运用缺省的PCTUSED40是比较适宜的;对于行长度较大的情况,最长的行有能够会占用半个以上的块空间,此时可设置 PCTUSED为10。较小的PCTUSED仅在表中的数据以随机方式被删除,而且仍有一些行长时间保管在块中时,才会呵斥空间运用上的问题,由于这些块 能够需求较长的时间才干或永远不能重新被用于存放新数据。在这种运用中,假设空间利用率不断处于较低程度,那么需对PCTUSED进展分析和调整。 总的说来,可以运用以下公式来计算PCTUSED结果为负数时取1: PCTUSED = 100 - PCTFREE - max(10, (maximum-row-size/ blo

15、cksize)*100); PCTFREE、PCTUSED在各种运用场所的选取原那么 以Insert为主的运用:小的PCTFREE,缺省的PCTUSED; 以Update为主的运用:根据行长度的变化范围来确定PCTFREE,PCTUSED运用缺省值; Insert后不久Delete:采用小的PCTFREE,非常小的PCTUSED; 随机Insert/Delete:根据行大小,运用上面的建议来设置; 运用Oracle8的分区技术来提高空间运用率 Oracle8中的表分区功能可用于历史性数据的运用场所,可运用时间或其它序列编号作为分区键,当旧的历史数据被删除后,表中剩下的数据仍可坚持较紧凑的存放形

16、状。 四、B*Tree索引段的运用 Btree索引段的构造 Btree索引段运用二叉树构造来组织和存放。典型的索引树由3层构造组成:根结点块存放指针指向分支节点数据块,分支节点块存放指针指向叶 节点,叶节点块存放真正的索引键值和对应数据行的ROWID。然而,最简单的索引段可以只需一个块:既是根结点又是叶节点,而庞大的索引可以有4层以上 的构造。与表中的一行数据可以存放到任何空闲的数据块中不同,在二叉树的数据构造中,每个键的值将独一确定它存放的叶节点位置;因此相对于常规表的链表数 据块组织方式,索引段具有更为严厉的数据构造,这也是索引段构造在DML操作中更容易变形的根源。 索引数据修正的细节 a

17、) Insert: 索引数据根据键值插入到相应叶节点中。假设叶节点空间已满,将创建新的叶节点数据块,它称为叶节点的split,此时又分为两种情况:假设键值位 于索引树的最尾部,那么新叶节点只存放插入的新键值,它称为991分裂,否那么将执行叶节点的5050分裂,即新块和旧块各存放原有50的索引数据。 b) Delete: 删除释放的空间可用于以后相应键值插入运用。单索引块中的数据完全被删除后,此块放入空闲链表,可以用于未来索引的split,但并不马上从索引树中删除,只需当此块在索引树的其它位置被重新运用时,它才会从原有位置上删除并移到新位置上。 c) Update: 索引中没有Update的操作

18、,对键值的修正将对应到索引中的DeleteInsert操作。 创建索引的有关参数 PCTFREE: 与表的PCTFREE不同,它只在索引创建时有效,在以后的插入操作中,此参数将不再起作用,索引数据可以充溢整个数据块。因此对于在已有一定数据的表上创建索引并且索引创建后存在随机的Insert、Update操作时,指定此参数才有意义。 INITTRANS: 指定初始分配给叶节点块的事务项槽数,每个事务transaction需求分配一个事务槽slot;它应等于叶节点块能够的并发事务数。当块中还有空间且事务槽不够用时,Oracle会进展动态扩展。 MAXTRANS: 指定在叶节点中允许分配事务槽的最大值;它用于防止大量突发的并发事务占用过多的叶节点空间。 索引运用上的思索 索

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论