You are on page 1of 2

ASM Performance Enhancements in Oracle 11g

Oracle 11g New Features Tips by Burleson Consulting


July 8, 2008
Oracle 11g SQL New Features Tips
Variable size of Allocation Units
ASM uses allocation units (AU) as the basic units of allocation within a disk group. By default, the size of
these AUs is 1MB in Oracle 10g. ASM extents are the raw storage used to hold the content of an ASM file.
ASM mirrors ASM files on an extent basis. In Oracle Database 10g, each data extent is a single Allocation
Unit.
The metadata for these extents are stored in bitmaps which describe the structure of an ASM file. These
extent maps consume disk space as well as shared memory. The memory part is sent from the ASM
instance to the ASMB background process of the DB instance. In Oracle 10g, ASM uses two different sizes
for the AUs, 1MB for course striping and 128KB for fine striping.
Because of the one to one mapping of an extent to an AU in Oracle 10g, an ASM file extent map can have
a size of up to gigabytes in a very large database which can cause problems when an ASM file must be
opened and it also creates inefficiencies in memory usage.
Oracle was aware of this problem already in 10g and addressed it with a workaround. In 10g, it is possible
to increase the size for AUs for course striping to 16MB and for fine stripes to 1MB by adjusting the two
hidden underscore-parameters:

_asm_ausize=16777216
_asm_stripesize=104857
It is not possible to change these parameters after disk groups have already been created. In other words,
the parameters must be adjusted in the init file of the ASM instance and the instance restarted to make the
changes effective before creating disk groups. It is necessary to adjust all templates for ASM disk groups
additionally. This feature provides the possibility to reduce the size of the extent maps to 1/16 in an Oracle
10g environment which allows managing the database with 10TB upwards to PB in ASM.
In order to find out how much shared memory is needed to handle the extent maps, it is necessary to first
find out how much ASM disk space the database utilizes:
SELECT SUM(bytes) / (1024*1024*1024)
FROM v$datafile;
SELECT SUM(bytes) / (1024*1024*1024)
FROM v$logfile a, v$log b
WHERE a.group#=b.group#;
SELECT SUM(bytes) / (1024*1024*1024)
FROM v$tempfile
WHERE status='ONLINE';
There is a formula to calculate this additional Shared Pool memory for an Oracle 10g database which uses
ASM storage depending on the redundancy level (number of mirrors) of the ASM disk groups used by the
instance:

(1MB of additional shared pool for every 100GB of disk space) + an additional 2MB for external
redundancy (no mirroring),

(1MB of additional shared pool for every 50GB of disk space) + an additional 4MB for normal redundancy
(two mirrors),

(1MB of additional shared pool for every 33GB of disk space) + an additional 6MB for high redundancy
(three mirrors)
Beginning with Oracle 11g, it is possible to have AUs of different sizes within the same ASM disk group,
even within the same ASM file. With this variable size extent support, the amount of shared memory
needed for ASM can be reduced dramatically for very large databases (VLDB). By this, large files can be
opened much faster because the amount of administrative shared memory structures is much less than with
the old 1MB AUs. This feature is enabled by default and it does not need any additional administrative
actions to use it.
In 11g, an extent can be composed of multiple AUs and Oracle uses a special algorithm to automatically
adjust the size of AUs as soon as the size of an ASM datafile exceeds a certain threshold. This means that
the size of the extent maps can be reduced to 1/8 and even 1/64 with Oracle 11g ASM, thereby making the
opening of very large ASM files much faster. An ASM file can grow to a size of up to 140 PB.
Here is how it works:
By DEFAULT for the first 20000 extents (0-19999), the AU size is 1MB for Oracle 11g, as it was the
default for all extents in Oracle 10g ASM. This one to one mapping of extents to AUs for a datafile is used
until the ASM file reaches the size of 20GB. As of the 20001
st
extent, 8 AUs form an extent set which
means that the size of the unit which is represented by one pointer in the extent map (an extent) is
automatically increased to a set of 8 AUs. This reduces the size of the extent map to describe the ASM file
to one eighth starting from here up to a size of 40GB for the datafile.
As of AU number 40000 in an ASM file, the number of AUs used to form one extent set is again
automatically incremented by a factor of eight. In other words, 64 AUs of 1MB size make up one extent set
as soon as the file gets larger than 40 gigabytes.
Variable size extent support only works for disk groups with compatible attributes
adjusted to at least 11g!

So far, just the DEFAULT behavior of ASM in Oracle 11g has been reviewed. It is also possible to
manually fix the size of all AUs within an ASM disk group to a uniform size by adjusting the disk group
attribute AU_SIZE. This must be done directly when the disk group is created and cannot be changed later
on. The AU for fine striping is always 128KB, as it was in 10g ASM. The AU for an ASM disk group can
be adjusted at creation time with the disk group attribute AU_SIZE to 1, 2, 4, 8, 16, 32 or 64 MB.
By using fine grained striping for redo log files, a lower latency is reached because smaller units get
distributed across all disk members of an ASM disk group. Oracle uses AUs as stripes for files in ASM
storage and spreads a file in an ASM disk group across all disks in a fail group. So now there is striping
within a fail group and mirroring across the fail groups within a disk group. By using coarse striping for
datafiles, Oracle achieves load balancing of read write operations across all disks within a disk group.

You might also like