技术相关:Oracle系统的RAID选择
--王珏原创
Oracle的推荐的IO做法是:SAME(Stripe and Mirror
Everywhere,在任何地方都是用“条带+镜像”,当然就是 RAID 1+0 ) ,而作为硬件供应商又总是顽固的坚持RAID
5可以用在OLTP类型的Oracle中。其实这是“商业利益”在作怪,作为Oracle当然不用理会你买什么硬件,关键是别把性能问题归结到
Oracle软件本身才好;而硬件厂商当然要炫耀其硬件性能如何了得,技术如何先进。
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的其他磁盘上”的
写性能损失。比如:
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)
- 一般情况,把你所有的盘做成一个RAID10,然后把所有文件都放置上面就ok了。
-
- 随机读写频繁:db_block_size*2
- 顺序读频繁:DB_FILE_MULTIBLOCK_READ_COUNT*db_block_size
- 如果,LVM不支持动态扩展,或者如果你只就几块单盘,不够条件组成RAID。
-
- 数据文件和索引没有必要分开,因为他们是顺序读取的。
- Redo log文件单独放到一个盘上,且千万不可放置到RAID5上。
参考文献:
Oracle: Oracle数据搬出RAID
5
Link URL:
http://blog.sina.com.cn/s/blog_592060b50100d0le.html
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/91771/viewspace-609562/
,如需转载,请注明出处,否则将追究法律责任。