原文: How many allocation units per file
作者: Bane Radulovic
译者:邱大龙,沃趣科技数据库技术专家,主要参与公司产品实施、测试、维护以及优化。对SQL优化、数据迁移、备份容灾等有深入的研究,对大数据量数据迁移、故障恢复、高并发下数据库性能调优有丰富的经验。
审校:魏兴华
责编:仲培艺
本文主要是对ASM文件的空间分配进行一些探讨和研究。
ASM空间分配的最小单位是AU,默认的AU size是1MB,但在Exadata下AU的默认大小是4MB。
ASM文件的空间分配是以extent为单位,每一个extent是由一个或多个AU组成,在11.2版本,前20000个extent,每一个extent由1个AU组成,接下来的20000个extent,每一个由4个AU组成,再超出的extent,每一个由16个AU组成。这个特性被叫做可变extent。而在11.1版本,extent的增长则遵循的是1-8-64倍AU的方式。在版本10,可变extent这个特性还没出现,因此所有的extent的大小都是1个AU。
Bytes vs space
视图V$ASM_FILE
中,有两列是关于空间分配的:BYTES和SPACE,它们的定义如下:
- BYTES - 文件的大小
- SPACE - 文件实际占用的ASM空间的大小
这两列的定义有一些细微的差异,但是这两列的数值差异可能非常大,下面来实际地看一下,首先交代我的测试环境,ASM和DB的版本为11.2.0.3,使用ASMLIB方式管理的磁盘:
可以通过如下查询来简单了解我的环境中磁盘组data的基本情况,例如AU的大小、冗余的级别,我的数据文件大多都位于这个磁盘组中。
SQL> select NAME, GROUP_NUMBER, ALLOCATION_UNIT_SIZE/1024/1024 "AU size (MB)", TYPE
from V$ASM_DISKGROUP
where NAME='DATA';
NAME GROUP_NUMBER AU size (MB) TYPE
---------------- ------------ ------------ ------
DATA 1