技术相关:Oracle系统的RAID选择
Oracle的推荐的IO做法是:SAME
(Stripe and Mirror Everywhere,在任何地方都是用“条带+镜像”,当然就是 RAID 1+0 ) ,而作为硬件供应商又总是顽固的坚持RAID 5可以用在OLTP类型的Oracle中。其实这是“商业利益”在作怪,作为Oracle当然不用理会你买什么硬件,关键是别把性能问题归结到 Oracle软件本身才好;而硬件厂商当然要炫耀其硬件性能如何了得,技术如何先进。
Oracle似乎也发现大家都不爱用RAID1+0(容量缩减一般,成本太高),因此在10g中引入了ASM“自动存储管理”(Automatic Storage Management,参见:Automated Storage Management ASM configuration ),而
Oracle ASM背后的基础就是RAID1+0,Oracle在
大力推荐ASM的背后目的其实就是为了利用RAID1+0来“维持”Oracle系统的I/O性能。
Oracle关于RAID的推荐如下:RAID Recommendations (From Metalink NOTE: 45635.1)
RAID | Raid类型 | Control File | Database File | Redo Log File | Archive Log File |
0 | 条带 | 避免 | 可以 | 避免 | 避免 |
1 | 镜像 | 最佳 | 可以 | 最佳 | 最佳 |
1+0 | 条带+镜像 | 可以 | 最佳 | 避免 | 避免 |
3 | 条带+静态奇偶校验 | 可以 | 可以 | 避免 | 避免 |
5 | 条带+轮转的奇偶校验 | 可以 | 如果RAID1+0不可用也可以 | 避免 | 避免 |
为什么RAID 5不建议使用在有大量更新的Oracle系统中呢?这要从RAID 5的原理说起(参见:RAID 5 术语解释 )。
RAID 5 是把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。当RAID5的一个磁盘数据发生损坏后,利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。
简单来说,就是RAID 5在写入的时候需要计算 数据的“奇偶校验信息”一并写入到RAID 5的其他磁盘上,由于这个计算过程,写性能会大大降低;而在读取的时候并不需要 计算 这个过程,因此“读”的时候可以多个磁盘同时读,性能当然较单个磁盘要好很多,读性能差不多和RAID 0一样
其实,由于一些新技术的出现,目前已经支持RAID 5使用在存在大量更新操作的Oracle中了,参见:
RAID5 now acceptable for Oracle --RAID5已经被Oracle接受。
databases Using RAID5 with Oracle ? --Oracle可以使用RAID 5吗?
Why Modern RAID 5 is Ideal for Oracle Databases --为什么现代RAID 5是Oracle数据库的理想存储?
RAID5 now acceptable for Oracle --RAID5已经被Oracle接受。
databases Using RAID5 with Oracle ? --Oracle可以使用RAID 5吗?
Why Modern RAID 5 is Ideal for Oracle Databases --为什么现代RAID 5是Oracle数据库的理想存储?
但要知道,这都是些“新技术”。其实简单来说,就是如何规避“ 计算 数据的奇偶校验信息一并写入到RAID 5的其他磁盘上 ”的 写性能损失 。比如: Hitachi TagmaStore RAID5 "Universal Storage Platform"使用256G内存作为RAID 5的cache,来规避上述的 写性能损失。
作为普通用户的我们,你买得起那么昂贵的存储设备吗?你有那么大的Cache吗?(如果为了使用RAID5 要买如此昂贵的设备,还不如直接使用RAID 1+0,除非你的Oracle有“N多T”或者“N多P”)。
因此也就诞生了 BAARF “Battle Against Any Raid Five”--向任何形式的RAID 5开战,这么个奇怪的组织。
因此关于Oracle的RAID选择,我的建议就是采用RAID1+0;
因此关于Oracle 存储设计的正确做法是:( I/O Configuration and Design )
因此也就诞生了 BAARF “Battle Against Any Raid Five”--向任何形式的RAID 5开战,这么个奇怪的组织。
因此关于Oracle的RAID选择,我的建议就是采用RAID1+0;
因此关于Oracle 存储设计的正确做法是:( I/O Configuration and Design )
- 一般情况,把你所有的盘做成一个RAID10,然后把所有文件都放置上面就ok了。
-
- 随机读写频繁:db_block_size*2
- 顺序读频繁:DB_FILE_MULTIBLOCK_READ_COUNT*db_block_size
- RAID最小stripe depth设定原则
-
- 如果,LVM不支持动态扩展,或者如果你只就几块单盘,不够条件组成RAID。
- 数据文件和索引没有必要分开,因为他们是顺序读取的。
- Redo log文件单独放到一个盘上,且千万不可放置到RAID5上。
参考文献: