Every ASM disk is divided into allocation units (AU). An AU is the fundamental unit of allocation within a disk group. A file extent consists of one or more AU. An ASM file consists of one or more file extents.
In case of 10g,ASM divides files into 1 MB extents/AU’s and spreads each file’s extents evenly across all disks in the disk group.
Starting from 11g, we can create Diskgroups of varying AU sizes ranging from 1 MB to 64 MB in powers of two, such as, 1, 2, 4, 8, 16, 32, or 64. Each Allocation Unit consumes some amount of memory in ASM SGA for storing the metadata information. Very Large Databases (VLDB) which can have sizes in TeraBytes will have too many AU’s allocated and also memory requirement for ASM instance will also increase. This will also impact the performance of the application. As a result Variable Size extents concept has been introduced in 11g.
Extents and Allocation Units
Number of Extents | Size |
0 – 19999 | 1*AU |
20000 – 39999 | 8*AU |
40000 – 59999 | 64*AU |
As shown in table, for first 20000 extents Extent size is always equal to AU. This keeps on increasing gradually.
The ASM coarse striping is always equal to the disk group AU size, but fine striping size always remains 128KB in any configuration . 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.
CREATE DISKGROUP DATA1 EXTERNAL REDUNDANCY DISK '/dev/sda1' ATTRIBUTE 'au_size'='10M';
You can query ALLOCATION_UNIT_SIZE column in V$ASM_DISKGROUP.
Now all this is documented and if I do not mention anything else you will be angry at me
Now we know this is implemented from 11g. But does that mean it is not available in 10g??
No. It is available in 10g, but we need to play around with some Hidden Parameters.
Warning – You should try this out in Development Environment before trying in Production database. Also contact Oracle Support to validate if this can be implemented in your system and ensure that there are no reported issues/bugs.
SQL> select nam.ksppinm NAME, val.KSPPSTVL VALUE from x$ksppi nam, x$ksppsv val where nam.indx = val.indx and nam.ksppinm like '%asm%';
NAME VALUE
------------------------------ --------------------
asm_diskstring /dev/sda7*
_asm_disk_repair_time 14400
asm_diskgroups DATA
asm_power_limit 1
_asm_ausize 1048576
_asm_blksize 4096
_asm_acd_chunks 1
_asm_libraries ufs
_asm_maxio 1048576
_asm_allow_only_raw_disks TRUE
_asmlib_test 0
_asm_allow_resilver_corruption FALSE
_asmsid asm
_asm_wait_time 18
_asm_skip_resize_check FALSE
_asm_stripewidth 8
_asm_stripesize 131072
_asm_droptimeout 60
_asm_emulmax 10000
_asm_emultimeout 0
_asm_kfdpevent 0
We need to look at parameters _asm_ausize and _asm_stripesize which are set to 1 M and 128 K respectively.
In case you wish to create Diskgroup of say 10M Allocation Unit and want to increase the Stripe size to 1M,then set following parameter in pfile
_asm_ausize=10485760 _asm_stripesize=1048576
Restart the ASM instance. Please note that these settings will be applicable only for new Diskgroups and will not modify the existing Diskgroups.
You will be required to change the template for the Diskgroup else all the datafiles will use COARSE attribute and will have stripe of 10M. You can find details in 10g SQL reference Guide
[@more@]来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23590362/viewspace-1042743/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/23590362/viewspace-1042743/