|Note: The following, unedited, was posted by Cary Milsap of Method-R
to comp.databases.oracle.server on 3-Aug-2004. It says much of what needs to be said ... and very succinctly. Only new technology such as Apple's
Xserve RAID changes what has been said below.
|My argument is this:
1. Mirroring is excellent for resilience. Striping is excellent for performance (as long as the striping is done with large enough granularity
as not to introduce a concurrency problem). Combining the two technologies makes for excellent resilience and excellent performance.
2. But mirroring is expensive per byte of storage. Hence RAID levels 2, 3, 4, 5, and 6 were proposed. Their design goals were to lessen the
expense-per-byte of storage of RAID level 1 (mirroring). For example, with G=5 RAID level 5, the price of resilience per byte of storage is 5/4 of a
4-disk array instead of 8/4.
3. But the additional parity operations required to run RAID  produce a performance penalty. The performance penalty is so bad (4:1 for many common Oracle operations)
that it begged for a solution: namely, the introduction of non-volatile cache and a complicated kernel (more lines of source code than Oracle 7.1) to run it all.
So, as long as the cache is big enough to stay ahead of your sustained throughput, a RAID level 5 array can perform almost as well as a well-configured array that uses
levels 0 and 1 combined.
4. But the RAID level 5 array is deficient in a number of important ways (performance degradation during partial outage as Howard mentioned, worse availability performance,
worse read performance [contrary to popular belief], inability to take online backups with a simple re-silver operation, etc.). And the cache and microcode make the RAID
level 5 array more expensive than the 0+1 or 1+0 array, which defeats the whole purpose of inventing RAID level 5 in the first place.
I'm not telling you not to use RAID level 5 (we use it for low-throughput systems with flexible availability requirements).
Just don't assume that it's cheaper than using RAID levels 0 and 1 for high-throughput systems. The insidious thing is that your initial procurement cost is probably cheaper
if you use RAID level 5, but if you don't figure out in your initial capacity plan that "disk sizing" means counting I/O calls, not counting bytes of storage,
then you're in for a lot more expense than you thought, if you go the RAID level 5 route.
By the way, did you notice in the original Chen/Katz/Gibson/Patterson/Lee paper that block-striped RAID level 1 is mathematically identical to RAID level 5 if you set G=2?
So, in a sense, I'm a big proponent of RAID level 5. I just don't like the idea, for high throughput systems, of using parity group sizes bigger than 2 or buying the cache