 |
|
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 20001st 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.
 |
This is an
excerpt from the new book
Oracle 11g New Features: Expert Guide to the Important
New Features by John Garmany, Steve Karam, Lutz Hartmann, V. J.
Jain, Brian Carr.
You can buy it direct from the publisher
for 30% off. |