(转)关于oracle表空间的规划方法

ORACLE的表空间划分将影响ORACLE的数据访问速度。我想请问各位大虾,你们在项目实施的时候是怎么划分表空间的,划分的依据是什么,有什么好处以及各个表空间用来存放什么样的数据库对象。
最好能用实例具体说明一下,比如DATA用来放大表数据,DATA_2用来放代码表数据。
希望各位来讨论一下

对于表空间来说,最重要的是如何把要连续访问的段放在一起,但是由于oracle 不能提供基于段的统计信息,所以对数据的物理模型设计和访问模式的详细了解对表空间的规划有非常大的好处。然后基于这些原则,我们就可以平衡这些因素。
表空间的使用遵循以下原则:
1. 对每个表空间上的段使用相同的区片尺寸;段参数INITIAL=NEXT,PCTINCREASE=0;可以通过使用Create Tablespace 的‘ MINIMUM EXTENT’ 子句来确保分配的区片是此参数的倍数;
2. 仅在表空间级指定INITIAL、NEXT参数,在创建数据段时不要指定这些参数;
3. 区片的大小根据段大小来确定,原则是均衡顺序扫描的效率和空间的利用率,同时确保段的区片数目控制在1024之下;根据此原则,在进行相应测试之后,确定以下区片选取规则:
段大小 区片大小)
128M 128K
128M-4G 4M
4G 128M
4.Oracle9i引入了本地管理表空间,它在管理和性能上都优于传统的字典管理表空间,它已融合了规则1、2、3 ;要使用此特性,在CREATE TABLESPACE语句中指定EXTENT MANAGEMENT LOCAL子句;
5. 段的区片数目上限应在4096之下,DML操作在此区片数目范围内不会有明显的性能差异;但某些DDL操作的速度则与区片的数目关系较大;因此合理的区片数目应保持在1024之下;对于持续不断扩展的段,应监控区片数目,在必要时移至其它表空间;
6. 对于特别大的数据段应控制在4G-128G(Oracle7为5G-160G)之间,它们应存放到单独的表空间上,同时对于这些特大段应考虑使用分区拉提高性能;
7. 用户的临时表空间应使用TEMPORARY类型;
8. 当系统的事务规模比较均衡时可以对回滚段使用OPTIMAL参数,否则应避免制定OPTIMAL参数,而定期监控回滚段的大小,并在必要时重建;
9. 临时段和回滚段绝对不要将用户数据存放到SYSTEM表空间,它是专为永远不会Drop和Truncate的系统数据对象而设计的;
10. 创建表空间时指定数据文件的大小应=区片整数倍+1数据块,对于Local Managed Tablespace则为区片整数倍+64K;
11. 当表空间使用统一的区片大小时,不要对其进行空间整理,重整的结果不仅耗费精力而且可能会使性能变差;对于未使用统一的区片尺寸的表空间应通过Export/Import重整;
12. 9i 提供了Alter Table …Move [Tablespace…]命令可用于快速重整表,Alter Index …Rebuild…[Tablespace…] 命令可用于快速重建索引;

首先,不同访问模式的段不应该放在同一个表空间当中,一般而言,我们有以下两种完全不同的访问模式需要特别考虑
顺序读写
段的读写基本是以一种连续读写的方式进行的,譬如:单线程全表扫描,快速全索引扫描,应该被单独存放在自己的表空间当中,而且,如果可能的话,这些表空间的数据文件也应当保存在一些并发访问尽可能少的磁盘当中,这样的话,在进行扫描的时候,查询速度会有非常大的提高。因为,基本上磁盘的寻道时间是最小的,而且大多数数据都可以从硬盘的buffer当中取得。
集中写
类似大量数据集中写入或者parallel direct loads 这种应用,应当被放在单独的表空间当中,而且尽可能保存在较快的镜像盘当中,而不应该选用RAID-5,
还有一个问题就是,对于一些只读的历史数据,最好把它们放在单独的表空间当中,并且标记为只读,这样会大大加快备份时的速度。

其次,考虑到磁盘的负载均衡,建议把段分开在不同的设备上来保存. 我们需要从两个不同的角度来进行考虑:
活动性
两个IO很大的段不应该放在同一个表空间当中,即使这个表空间是由多个数据文件组成,也没有办法避免由于IO 争用造成的性能下降.
相关性
通常情况下,把相关的一些段从一个表空间当中分离出来,典型地来说就是尽可能把表和索引分在不同地表空间,两个经常需要做连接地大表分在两个不同地表空间,这样就可以避免,数据访问,索引读取和执行计划同时对一个表空间进行大量地IO操作。

常用原则
1、一般较大的表或索引单独分配一个tablespace。
2、Read only对象或Read mostly对象分成一组,存在对应的tablespace中。
3、若tablespace中的对象皆是read only对象,可将tablespace设置成read only模式,在备份时,read only tablespace只需备份一次。
4、高频率insert的对象分成一组,存在对应的tablespace中。
5、增、删、改的对象分成一组,存在对应的tablespace中。
6、表和索引分别存于不同的tablespace。
7、存于同一个 tablespace中的表(或索引)的extent 大小最好成倍数关系,有利于空间的重利用和减少碎片。
根据以上原则,数据库表空间设计如下:原则上每个schema对应一个表空间和一个相应索引表空间;每个schema下的大表对应一个单独的表空间和索引表空间;对于需要分区的特大表,则每个子分区对应一个单独的表空间和索引空间。
posted @ 2009-02-27 15:09  AK47+  阅读(1476)  评论(0编辑  收藏  举报