两种不同应用下,数据库的参数设置,以及资源的分配策略都有较大不同。以实际数据库Oracle 9i为例,在使用DBCA创建数据库时,需根据具体应用的不同选择相应的模板:Transaction Processing、Data Warehouse和General Purpose。这三种模板分别对应着OLTP应用,OLAP应用和混合应用。选择不同的模板,从而为不同的数据库应用指定不同的参数,下面就简单介绍一下在不同应用中需设置不同值的数据库参数。
db_block_size:数据库最小物理单元”块”的大小,以字节为单位。对于OLTP类型应用,该参数一般设置地小点,如2048(2k),4096(4k)等;而对于OLAP类型的应用,该参数一般设置地大点,如16384(16K),32768(32K)等,因为OLAP应用下需要进行很多全表扫描,此参数值设置地大些,可加快扫描的速度。当然为了同时兼顾两种应用,一般设置为8192(8K)。
db_file_multiblock_read_count:Oracle在执行全表扫描时一次读取的block的数量。当然该参数的最大有效值受系统和磁盘本身的I/O能力的影响。在OLAP类型应用下该参数设置的值要比OLTP应用下大,这样可以加快全表扫描的速度。
db_cache_size:数据缓冲区的大小(字节)。在OLAP类型应用中,太大的数据缓冲区是没有多少用处的,一般设置的值要比OLTP类型的应用要小许多。
hash_join_enabled:如果设置为TRUE,优化程序将在计算最有效的联接方法时考虑哈希联接。Oracle建议OLAP类型应用程序应使用TRUE值。
query_rewrite_enabled:启用或禁用对物化视图的查询重写。如果该参数设置为TRUE,并且一个在基表上的查询能够被物化视图满足,则Oracle会自动将此查询用查询物化视图来替代。Oracle建议OLAP类型应用使用TRUE值,从而使查询能够被相应的物化视图所替代,加快查询的速度。
sort_area_size:指定排序操作所能使用的最大内存量。排序完成并且结果返回后,该内存将释放。如果所需内存超过了该参数的值,将使用临时表空间来进行排序,所以增大该值可以提高复杂排序的效率。而OLAP类型应用要进行许多复杂的排序操作,所以此类型应用下该参数设置的值要大于OLTP应用。
star_transformation_enabled:确定基于成本的查询转换是否将被应用到星型查询中。如果设置为TRUE,优化程序将考虑将基于成本的转换应用于星型查询中,转换后的查询将使用位图索引,加快查询速度。Oracle建议OLAP类型应用程序应使用TRUE值。
undo_retention:设置回滚段中的被提交或回滚的数据强制保留时间,单位是秒。OLTP类型应用下该参数设置的值要小于OLAP类型应用下。
pga_aggregate_target:此参数用来指定所有会话(session)总计可以使用最大PGA内存。这个参数可以被动态地更改,这是从Oracle9i开始,Oracle引入了自动PGA管理的新特性。OLAP类型应用下,该参数设置的值要大于OLTP应用下。
log_buffer:SGA中重做日志缓冲区的大小。该缓冲区暂时保存数据库内所有数据块的更改记录。更新密集型的OLTP应用,会产生大量的重做日志,所以其设置的值大于OLAP应用。
表2-2列出了为不同的应用选择不同的模板而指定的不同的数据库参数值,当然在不同的软硬件环境下,具体值可能有所差异。
表2-2 三种模板下各个参数的默认值
数据库参数名称 | OLTP应用 | 混合应用 | OLAP应用 |
db_block_size | 4096 | 8192 | 8192 |
db_file_multiblock_read_count | 8 | 16 | 32 |
db_cache_size | 33554432 | 25165824 | 16777216 |
hash_join_enabled | FALSE | TRUE | TRUE |
query_rewrite_enabled | FALSE | FALSE | TRUE |
sort_area_size | 524288 | 524288 | 1048576 |
star_transformation_enabled | FALSE | TRUE | TRUE |
undo_retention | 900 | 10800 | 10800 |
pga_aggregate_target | 16777216 | 25165824 | 33554432 |
log_buffer | 1048576 | 1048576 | 524288 |