<b>Oracle数据空间的利用、监控和保护-安装配置</b>[Oracle防范]
本文“<b>Oracle数据空间的利用、监控和保护-安装配置</b>[Oracle防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
Oracle供应了不少办法用于数据空间的利用、监控和保护,同时也在各版本中连续对这方面的功效举行了加强,目的在于简化这方面工作的复杂度,提高利用的运行效率.
1、相关概念
数据库的空间在逻辑上分为多个表空间,每个表空间则由系统中的一个或多个物理数据文件构成;Oracle存储数据的基本单位是块,其大小在建库时由DB_BLOCK_SIZE参数肯定,一个或多个持续的块构成一个区片(EXTENT),它作为数据对象存储的基本单位来利用.在Oracle中,每个基本数据对象利用的空间称为段(Segment),段存放在唯一的表空间上,每个段实际上是一系列区片(更为精确地是数据块)的调集.每个简单数据对象对应一个段;关于分区对象如分区表、索引,则每个(子)分区对应一个段,由各个(子)分区共同构成一个完好的数据对象.因此,可以把表空间看做桶,里面放着很多段;一个段只能放在一个桶中,而不能超越多个桶.
2、表空间的利用
表空间碎片的产生
由于同一个表空间中存放有多个数据段,各个数据段可以有差别的区片尺寸,差别段的区片可以穿插存放;当这些段中的区片经过度配(如成立表)、释放(如删除表)后,便大概使表空间中本来持续的闲暇数据块变成不持续,而区片必须由持续的数据块构成,这时,当某一段需求分配新的区片时,就有大概呈现固然表空间闲暇数据块的总和大于所需区片的大小,但却无法找到一串通续的块来供此区片分配利用.这种情形就称为表空间的ExtentFragmentation.我们常常会碰到这种情形,明显从DBA_FREE_SPACE中计算表空间还有几百MB,但此中的某一个表却无法再扩大几个MB的空间.
消除表空间碎片
Oracle在段的区片分配上为用户供应了很大的机动性,但是假如未能精确利用成立表空间和数据对象的各个可挑选参数,则在最后将不可避免的要面对区片碎片的问题.Oracle的BhaskarHimatsingka和JuanLoaiza,为此提出了SAFE(SimpleAlgorithmforFragmentationElimination.)配制法则,通过遵守这套法则,区片级碎片可以完好的避免.而实际上,Oracle8i引入的新特点:LocalManagedTablespace就是SAFE法则在OracleServer的内置实现.SAFE原则概括起来包含:
1.对每个表空间上的段利用相同的区片尺寸;段参数INITIAL=NEXT,PCTINCREASE=0;可以通过利用CreateTablespace的‘MINIMUMEXTENT’子句来确保分配的区片是此参数的倍数;
2.仅在表空间级指定INITIAL、NEXT参数,在成立数据段时不要指定这些参数;
3.区片的大小按照段大小来肯定,原则是均衡次序扫描的效率和空间的操纵率,同时确保段的区片数目掌握在1024之下;按照此原则,在举行呼应测试之后,肯定区片选取法则;
有此数据库中可以只利用三种区片大小的表空间;在对象成立之前需对其大小举行评价,并放到呼应的表空间中;
4.Oracle815引入了本地管理表空间,它在管理和性能上都优于传统的字典管理表空间,它已交融了法则1、2、3;要利用此特点,在CREATETABLESPACE语句中指定EXTENTMANAGEMENTLOCAL子句;
5.段的区片数目上限应在4096之下,DML操作在此区片数目范围内不会有明显的性能差别;但某些DDL操作的速度则与区片的数目关系较大;因此公道的区片数目应保持在1024之下;关于持续不断扩大的段,应监控区片数目,在必要时移至别的表空间;
6.关于分外大的数据段应掌握在4G-128G(Oracle7为5G-160G)之间,它们应存放到单独的表空间上,同时关于这些特大段应考虑利用分区拉提高性能;
7.用户的暂时表空间应利用TEMPORARY范例;
8.当系统的事件规模对比均衡时可以对回滚段利用OPTIMAL参数,不然应避免拟定OPTIMAL参数,而按期监控回滚段的大小,并在必要时重建;
9.暂时段和回滚段绝对不要将用户数据存放到SYSTEM表空间,它是专为永久不会Drop和Truncate的系统数据对象而计划的;
10.成立表空间时指定数据文件的大小应=区片整数倍+1数据块,关于LocalManagedTablespace则为区片整数倍+64K;
11.当表空间利用统一的区片大小时,不要对其举行空间整理,重整的后果不但耗费精神并且大概会使性能变差;关于未利用统一的区片尺寸的表空间应通过Export/Import重整;
12.8i供应了AlterTable…Move[Tablespace…]号令可用于快速重整表,AlterIndex…Rebuild…[Tablespace…]号令可用于快速重建索引.
有关利用单个区片的误导
在很多关于碎片整理的文档中倡议在Export时利用Compress=Y选项,将表中的全部数据调整到一个区片中,盼望在Import后得到杰出性能.由此让很多人产生一个概念,认为当表中数据全部存放到一个区片中时,可以得到杰出性能.实际上单区片段只在以下条件成立时,才具有优胜性.
数据主要以(全段)扫描方法拜候;
段所对应的数据块在物理磁盘上持续存放,Oracle可以公布较大的次序磁盘读操作;
通过对这两条举行解析可以发现,一方面数据库中大部份表是通过索引来拜候,另一方面目前的数据库文件普通在物理上利用了RAID5或RAID0+1技术,数据以条带化方法分布到多个物理磁盘上,逻辑上的单个区片和多区片在物理上并没有本质上的辨别;别的,从Oracle的角度来看,管理几百个区片的段是非常轻松的并不会有性能的下降.由此可见将整个段放到一个区片中并没有明显好处,而这种做法却会招致表空间碎片的产生.
3、表数据段的利用
表空间的组织
Heap表的空间由一系列区片链接而成,每个数据块除块头外别的部份可用于存放数据,在成立表时可以指定以下参数:
PCTFREE:块中保存用于UPDATE操作的空间百分比,当数据占用的空间到达此上限时,新的数据将不能再插入到此块中;
PCTUSED:指定块中数据利用空间的最低百分比;当一个块在到达PCTFREE,之后阅历了一些DELETE操作,在其空间利用下降到PCTUSED后便可以重新被用于INSERT数据;这就是PCTFREE/PCTUSED参数的含义;
调整PCTFREE、PCTUSED参数的目标一方面是提高性能,另一方面则主如果提高空间利用效率,避免呈现块中存在有很多未用的空间,但却无法找到一个块可以被用于插入新数据行的情形发生.
PCTFREE的利用
在Oracle中表的每一行数据由唯一的ROWID标志;而Oracle支持的数据范例中有一些长度是可变的,如VARCHAR,当对这些数据举行UPDATE时,假如块中的可用空间不能包容UPDATE后的数据行时,Oracle将会把此行移到别的数据块,同时保存此数据行的ROWID不变,并在原有块中建一指针指向行迁移后的位置.在这种情形下读取一行数据将需求拜候2个数据块,从而招致性能下降.PCTFREE保存的空间就是为确保更改后的数据行可以仍存放于原有数据块中,避免行迁移的情形发生.
由此,假如PCTFREE设置不足时大概产生行迁移;而另一方面假如PCTFREE设置太高,将会造成空间浪费.因此精确设置PCTFREE需求对表中数据的利用举行解析.关于数据长度不会改变或极少更新的情形,可以采取较小的PCTFREE;关于别的大大都情形应采取稍大的PCTFREE(PCTFREE的缺省值是10,假如不好预计需预留的空间,可以利用15-25的范围),不要为节俭块中的空间而利用较小的PCTFREE值.
以上是“<b>Oracle数据空间的利用、监控和保护-安装配置</b>[Oracle防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |