关于oracle表空间的规划方法

  • 格式:docx
  • 大小:39.16 KB
  • 文档页数:3

关于oracle表空间的规划方法

oracle的表空间划分将影响oracle的数据访问速度。我想请问各位大虾,你们在项目实施的时候是怎么划分表空间的,划分的依据是什么,有什么好处以及各个表空间用来存放什么样的数据库对象。

最好能用实例具体说明一下,比如data用来放大表数据,data_2用来放代码表数据。

期望各位去讨论一下

对于表空间来说,最重要的是如何把要连续访问的段放在一起,但是由于oracle不能提供基于段的统计信息,所以对数据的物理模型设计和访问模式的详细了解对表空间的规划有非常大的好处。然后基于这些原则,我们就可以平衡这些因素。表空间的使用遵循以下原则:

1.对每个表中空间上的段采用相同的区片尺寸;段参数initial=next,pctincrease=0;可以通过采用createtablespace的‘minimumextent’子句去保证分配的区片就是此参数的倍数;2.仅在表中空间级选定initial、next参数,在建立数据段时不要选定这些参数;3.区片的大小根据段大小去确认,原则就是平衡顺序读取的效率和空间的利用率,同时保证段的区片数目掌控在1024之下;根据此原则,在展开适当测试之后,确认以下区片挑选出规则:段大小区片大小)128m128k128m-4g4m4g128m

4.oracle9i引入了本地管理表空间,它在管理和性能上都优于传统的字典管理表空间,它已融合了规则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.9i提供了altertable…move[tablespace…]命令可用于快速重整表,alterindex…rebuild…[tablespace…]命令可用于快速重建索引;

首先,相同出访模式的段不必须放到同一个表中空间当中,一般而言,我们存有以下两种全然相同的出访模式须要特别考量顺序读取

段的读写基本是以一种连续读写的方式进行的,譬如:单线程全表扫描,快速全索引扫描,应该被单独存放在自己的表空间当中,而且,如果可能的话,这些表空间的数据文件也应当保存在一些并发访问尽可能少的磁盘当中,这样的话,在进行扫描的时候,查询速度会有非常大的提高。因为,基本上磁盘的寻道时间是最小的,而且大多数数据都可以从硬盘的buffer当中取得。集中写

相似大量数据分散载入或者paralleldirectloads这种应用领域,应被放到单独的表中空间当中,而且尽可能留存在较慢的镜像盘当中,而不必须采用raid-5,除了一个问题就是,对于一些所读的历史数据,最出色把它们放到单独的表中空间当中,并且标记为所读,这样可以大大大力推进备份时的速度。

其次,考虑到磁盘的负载均衡,建议把段分开在不同的设备上来保存.我们需要从两个不同的角度来进行考虑:活动性

两个io非常大的段不必须放到同一个表中空间当中,即使这个表中空间就是由多个数据文件共同组成,也没办法防止由于iodealing导致的性能上升.相关性

通常情况下,把相关的一些段从一个表空间当中分离出来,典型地来说就是尽可能把表和索引分在不同地表空间,两个经常需要做连接地大表分在两个不同地表空间,这样就可以避免,数据访问,索引读取和执行计划同时对一个表空间进行大量地io操作。

常用原则

1、一般较大的表或索引单独分配一个tablespace。

2、readonly对象或readmostly对象分为一组,存有对应的tablespace中。3、若tablespace中的对象皆就是readonly对象,可以将tablespace设置成readonly模式,在备份时,readonlytablespace只需备份一次。4、高频率insert的对象分为一组,存有对应的tablespace中。5、减、删帖、改为的对象分为一组,存有对应的tablespace中。6、表和索引分别藏于相同的tablespace。

7、存于同一个tablespace中的表(或索引)的extent大小最好成倍数关系,有利于空间的重利用和减少碎片。 根据以上原则,数据库表中空间设计如下:原则上每个schema对应一个表中空间和一个适当索引表中空间;每个schema下的大表对应一个单独的表中空间和索引表中空间;对于须要分区的空难事件表中,则每个子分区对应一个单独的表中空间和索引空间。db2

感谢两位老师的解答,虽然能看的明白,但还是有点模糊,总结一下:

1、想一想数据量的小的表也就是和操作方式频密的展毛联系的,通常的热表可以放在一个表中空间2、如果存有多功能数据量热表须要再次创建表中空间(似的不恰当,表中分区功能功率io,表中分区

不明白)

3、不经常出访的表中最出色放在一个表中空间

4、临时表空间需要和建立的最大表空间页大小匹配5、表空间最好建立在裸设备上

下面的经验法则就是创建在表中空间中每个表的平均值大小的基础上的:

如果小于50mb,extentsize为8

如果介乎50至500mb之间,则extentsize为16

如果介于500mb到5gb之间,则extentsize为32

如果大于5gb,则extentsize为64