Right now I’m working on some internal documentation and referencing Oracle 11g’s Storage Administrators Guide (ASM manual). And I think there’s a bit of a contradiction here about the stripe size. ASM uses a variable “data extent” size when allocating space for files (like any sane filesystem) – the first 20000 data extents are equal to the diskgroup allocation unit (AU), the next 20000 are AU*8, etc. But it’s a little unclear to me how the stripe size is determined. Seems to me that you’d stripe “data extents” rather than allocation units and I think I’ve even heard before that “extents are mirrored [and presumably striped]” in ASM. In fact the illustration in the manual shows the stripes in exactly that manner:
However the manual states that the opposite is true – striping based on AU instead of data extent – in two different places on that page. First, just before the illustration:
The ASM coarse striping is always equal to the disk group AU size, but fine striping size always remains 128KB in any configuration (not shown in the figure). The AU size is determined at creation time with the allocation unit size (AU_SIZE) disk group attribute. The values can be 1, 2, 4, 8, 16, 32, and 64 MB.
And again right after it:
To stripe data, ASM separates files into stripes and spreads data evenly across all of the disks in a disk group. The stripes are equal in size to the effective AU. The coarse-grained stripe size is always equal to the AU size. The fine-grained stripe size always equals 128 KB; this provides lower I/O latency for small I/O operations such as redo log writes.
As far as I can tell, it seems to be a contradiction in the manual. I commented on the documentation page and I’ve opened an SR; I’ll post an update when I get a reply.
The SR got answered very quickly (less than an hour) – and said that striping is based on the data extent size. The usage of the term “allocation unit” was what I found confusing (even in the SR resolution)… but at least we have an answer. :)
Suppose you have a diskgroup with 1MB AU size. After a particular file has 20000 extents, the allocation unit for that file becomes 8MB.
allocation unit = extent size 40000>extent>20000 => FILE_AU=DISKGROUP_AU*8.
Here’s the definitive quote from the SR: “[After 20000 extents] the 8meg AU will be striped, with the first 8meg AU on disk one, the second 8meg AU on disk 2 and so on.”
This would apply for both striping and mirroring. My gut feeling was right; I was just a bit confused by the definitions of extents and allocation units in the manual (which are incorrect).