转载:http://blog.csdn.net/robinson1988/article/details/7836338

性能优化最好的书就是官方文档。官方文档每一句话都值得引起我们深思。

Allocation Units

When you create a disk group, you can set the Oracle ASM allocation unit size with

the AU_SIZE disk group attribute. The values can be 1, 2, 4, 8, 16, 32, or 64 MB,

depending on the specific disk group compatibility level.Larger AU sizes typically

provide performance advantages for data warehouse applications that use large

sequential reads.

设置较大的AU能提升数据仓库应用中顺序读性能。在生成环境中,数据仓库IO绝大部分都是顺序读,而且是大量的顺序读。所以在创建数据库的时候,

设置正确的AU非常重要。那么现在我来测试一下设置不同的AU对性能的影响。

说来惭愧,我这个测试是在虚拟机上做的。

Oracle 11.2.0.1 block size 32k

Virtual Box 4.1.16

8块2G虚拟磁盘组成ASM DISK GROUP

加载数据 3.94Gb

创建AU=1M b的表空间

SQL>CREATEBIGFILETABLESPACEtest_au1DATAFILE'+DATA_AU1/test.dbf'

SIZE4GNOLOGGINGONLINEPERMANENTBLOCKSIZE32768

EXTENTMANAGEMENTLOCALUNIFORMSIZE1048576DEFAULT

compressSEGMENTSPACEMANAGEMENTAUTO;234

Tablespacecreated.

Elapsed:00:01:43.19

加载速度

经过时间为:00:06:37.89

CPU时间为:00:01:34.32

读取速度

SQL>altersystemflushbuffer_cache;

Systemaltered.

Elapsed:00:00:00.07

SQL>selectcount(*)fromtest;

COUNT(*)

----------

37127168

Elapsed:00:00:29.82

SQL> /

COUNT(*)

----------

37127168

Elapsed: 00:00:29.57

创建AU=4M 的表空间

SQL>CREATEBIGFILETABLESPACEtest_au4DATAFILE'+DATA_AU4/test.dbf'

SIZE4GNOLOGGINGONLINEPERMANENTBLOCKSIZE32768

EXTENTMANAGEMENTLOCALUNIFORMSIZE4194304DEFAULT

compressSEGMENTSPACEMANAGEMENTAUTO;234

Tablespacecreated.

Elapsed:00:01:19.01

加载速度

经过时间为:00:06:49.30

CPU时间为:00:01:29.42

读取速度

SQL>altersystemflushbuffer_cache;

Systemaltered.

Elapsed:00:00:00.07

SQL>selectcount(*)fromtest;

COUNT(*)

----------

37127168

Elapsed:00:00:20.04

SQL> /

COUNT(*)

----------

37127168

Elapsed: 00:00:19.86

创建AU=8M b的表空间

SQL>CREATEBIGFILETABLESPACEtest_au8DATAFILE'+DATA_AU8/test.dbf'

SIZE4GNOLOGGINGONLINEPERMANENTBLOCKSIZE32768

EXTENTMANAGEMENTLOCALUNIFORMSIZE8388608DEFAULT

compressSEGMENTSPACEMANAGEMENTAUTO;234

Tablespacecreated.

Elapsed:00:01:12.34

加载速度

经过时间为:00:06:12.34

CPU时间为:00:01:28.82

读取速度

SQL>altersystemflushbuffer_cache;

Systemaltered.

Elapsed:00:00:00.06

SQL>selectcount(*)fromtest;

COUNT(*)

----------

37127168

Elapsed:00:00:18.45

SQL> /

COUNT(*)

----------

37127168

Elapsed: 00:00:18.64

创建AU=16M b的表空间

SQL>CREATEBIGFILETABLESPACEtest_au16DATAFILE'+DATA_AU16/test.dbf'

SIZE4GNOLOGGINGONLINEPERMANENTBLOCKSIZE32768

EXTENTMANAGEMENTLOCALUNIFORMSIZE16777216DEFAULT

compressSEGMENTSPACEMANAGEMENTAUTO;234

Tablespacecreated.

Elapsed:00:01:08.27

加载时间

经过时间为:00:07:02.20

CPU时间为:00:01:30.01

读取时间

SQL>altersystemflushbuffer_cache;

Systemaltered.

Elapsed:00:00:00.11

SQL>selectcount(*)fromtest;

COUNT(*)

----------

37127168

Elapsed:00:00:17.79

SQL> /

COUNT(*)

----------

37127168

Elapsed: 00:00:17.65

创建AU=32M b的表空间

SQL>CREATEBIGFILETABLESPACEtest_au32DATAFILE'+DATA_AU32/test.dbf'

SIZE4GNOLOGGINGONLINEPERMANENTBLOCKSIZE32768

EXTENTMANAGEMENTLOCALUNIFORMSIZE33554432DEFAULT

compressSEGMENTSPACEMANAGEMENTAUTO;234

Tablespacecreated.

Elapsed:00:01:10.84

加载时间

经过时间为:00:06:48.11

CPU时间为:00:01:34.97

读取时间

SQL>altersystemflushbuffer_cache;

Systemaltered.

Elapsed:00:00:00.08

SQL>selectcount(*)fromtest;

COUNT(*)

----------

37127168

Elapsed:00:00:17.16

SQL> /

COUNT(*)

----------

37127168

Elapsed: 00:00:16.81

从实验上可知,如果OLAP环境设置AU=1Mb,那么悲剧去吧

AU=1Mb  读取速度接近30秒

AU=4Mb  读取速度接近20秒

AU=8MB 读取速度接近19秒

AU=16MB 读取速度接近18秒

AU=32Mb 读取速度接近17秒

数据加载速度都差不多,创建表空间的时候AU越大,速度越快,也就是说设置较大的AU,数据文件resize的时候也更快。表空间自动增长的情况下,大的AU也增长更快。

结论:

在数据仓库应用中,用ASMCA创建DISK GROUP的时候一定要设置AU(默认为1)>=4 。

Oracle官方文档推荐设置AU=4,其实我也推荐设置AU=4,因为从实验上看AU=4开始,顺序读取速度并没有因为AU的增加而显著增加。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐