初始化参数

初始化参数作用:

  • 用来预设和约束Oracle实例的行为

对于OLAP系统,要用到的初始化参数大致可以分为4类:

  • 内存相关的参数
  • I/O相关的参数
  • 优化器相关的参数
  • 并行相关的参数

内存相关参数

SGA_TARGET:可以根据V$SGA_TARGET_ADVICE视图推荐的参数配置。也可以根据AWR报告的SGA Target Advisory配置

SGA Target Advisory的内容:

  • SGA Target Size(M):估算的SGA大小
  • SGA Size Factor:SGA大小的影响因子
  • Est DB Time(s):估算的SGA大小计算出的DB Time
  • Est Physical Reads:物理读次数

PGA_AGGREGATE_TARGET(所有合并后的整个PGA大小):可以根据V$PGA_TARGET_ADVICE推荐的参数配置。也可以根据AWR报告的PGA Memory Advisory配置。

PGA Memory Advisory内容:

  • PGA Target Est(MB):PGA的估算大小
  • Size Factor:影响因子,作用和buffer pool相同
  • W/A MB Processed:Oracle为了产生估算处理的数据量
  • Estd Extra W/A MB Read/Written to Disk:处理数据中需要物理读写的数据量
  • Estd PGA Cache Hit %:估算的PGA命中率
  • Estd PGA Overalloc Count:需要在估算的PGA大小下额外分配内存的次数

其他相关的初始化参数建议值视图:

  • V$SGA_TARGET_ADVICE:可以查看SGA的建议值
  • V$DB_CACHE_ADIVDE:可以查看数据缓存区的建议值
  • V$SHARED_POOL_ADVICE:可以查看共享池的建议值
  • V$JAVA_POOL_ADVICE:可以查看Java池的建议值
  • V$STREAM_POOL_ADVICE:可以查看流池的建议值
  • V$PGA_TARGET_ADVICE:可以查看PGA区的建议值

I/O相关的参数

DB_FILE_MULTIBLOCK_READ_COUNT:这个参数用来约束Oracle做多数据块读取时的行为。对于海量数据库的系统,如果物理磁盘IO足够时,这个值设置的大一些比较好,但是这个值不是精确的。

其他的I/O相关参数:

  • DB_WRITER_PROCESSES
  • DISK_ASYNCH_IO
  • DBWR_IO_SLAVES
  • DB_FILES

和优化器相关的参数

CURSOR_SHARING:这个参数是用来告诉Oracle在什么情况下可以共享游标,即SQL重用。

当SQL没有绑定变量时,才会产生作用。

所谓SQL重用,就是相同的SQL语句,Oracle只对它第一次运行时执行硬解析操作,后续的SQL则直接使用第一次硬解析的结果,这个结果中,最主要的一个内容就是SQL的执行计划。

可以设置的值:

  • EXACT:SQL语句必须绝对一样,才可以共享游标,否则将作为新的SQL处理
  • SIMILAR:如果CBO发现被绑定变量的谓词还有其他的执行计划可以选择时,如果谓词条件的值有变化,就会产生一个新的子游标,而不是重用之前的SQL;如果谓词没有其他的执行计划可选择,则忽略谓词的值,重用之前的SQL
  • FORCE:CBO将SQL的所有谓词用变量替换,只做一次硬分析,之后所有的SQL都重用第一个SQL

如果是一个OLAP类型的数据库,应该将它的值设置为EXACT,同时不要绑定变量。

SIMILAR和FORCE的目的,都是在系统变量绑定效果不好的情况下,通过数据库强制绑定变量来达到绑定变量的目的。

  1. -- 例如,设置共享游标为similar
  2. alter session set cursor_sharing=similar;

OPTIMIZER_DYNAMIC_SAMPLING:这个参数是用来设定Oracle动态采样的级别的。

级别:

  • Level 1:Oracle对没有分析的表进行动态采样,但需要同时满足4个条件:

    • SQL中至少有一个未分析的表
    • 未分析的表出现在关联查询或者子查询中
    • 未分析的表没有索引
    • 未分析的表占用的数据块要大于动态采样默认的数据块(32个)
  • Level 2:对所有的未分析的表,动态采样的数据块是默认数据块的2倍
  • Level 3:采样的表包含满足Level 2定义的所有表,同时包括那些谓词有可能潜在的需要动态采样的表,这些表动态采样的数据块为默认数据块;对没有分析的表,动态采样的数据块为默认数据块的2倍
  • Level 4:采样的表包含满足Level 3定义的所有表,同时还包含一些表,他们包含一个单表的谓词会引用另外的2个列或者更多的列;采样的块数是动态采样默认数据块数;对没有分析的表,动态采样的数据块为默认数据块的2倍
  • Level 5/6/7/8/9:采样的表包含满足Level 4定义的所有表,同时分别使用动态采样默认数据块的2、4、8、32、128倍的数量来做动态采样
  • Level 10:采样的表包含满足Level 9定义的所有表,同时对表的所有数据进行动态采样。

建议在OLAP或者数仓环境中,将动态采样的Level设置为3或者4比较好;相反,在OLTP系统下,不应该使用动态采样。

如果能对表做分析的话,最好对表做表分析。表分析要比动态采样准确的多。

OPTIMIZER_MODE:优化器工作模式

可选值:

  • ALL_ROWS
  • FIRST_ROWS_n

并行相关参数

PARALLEL_ADAPTIVE_MULTI_USER:当这个参数为true时,Oracle自动根据系统的负载情况和每个用户使用的并行度情况来动态的调整并行度的值,以达到最优的性能。

如果用户使用的并行度太高或者系统的负载过重,Oracle会根据一个算法,自动的降低并行度来优化并行执行的效率。

PARALLEL_INSTANCE_GROUP:通过这个参数和INSTANCE_GROUPS参数一起,可以约束并行执行进程在哪些RAC实例上执行。

这个参数只在RAC架构下有实际意义,当并行进程分布到很多个实例上执行时,可能会导致并行执行的效率非常低,可以通过这个参数来将并行进程限制在特定的1个或几个实例上面。

其他并行相关参数:

  • PARALLEL_EXECUTION_MESSAGE_SIZE
  • PARALLEL_MAX_SERVERS
  • PARALLEL_MIN_PERCENT
  • PARALLEL_MIN_SERVERS
  • PARALLEL_AUTOMATIC_TUNING