oracle 并行学习 (一)

1 .  参数讲解:

parallel_min_servers 为实例启动时创建的从属进程数量。这些从属进程始终是可用的,当服务器进程请求的时候就不需要再创建了。这个初始化参数的默认值为0,这意味着在实例启动的时候是不会创建从属进程的。建议:只有在一些SQL语句花费太长时间来等待从属进程的情况下,才来修改这个参数值,与这个操作相关的等待事件为 os thread startup.

parallel_max_servers 为池中从属进程的最大可用数量。一般将它的值设为核的8到10倍是一个不错的起点。它的默认值依赖于多个其他的初始化参数,以及版本和平台。

parallel_automaitc_tuning 初始化参数被设置为TRUE,注意:在Oracle 10g以后,已经不赞成使用这个初始化参数了。

 作为进程间通讯的表队列是一个内存结构,这个内存结构既可以在共享池进行分配或也可以在大池中进行分配,建议在大池中分配.有2种情况会导致在大池中为表队列分配内存:

(1).通过初始化参数sga_target或在Oracle 11g中的memory_target启动了自动SGA管理。

(2).初始化参数被parallel_automaitc_tuning被设置为true.

每个表队列最多由3个(RAC中有4个)缓冲区组成。每个缓冲区的大小由初始化参数parallel_execution_message_size的大小来确定。它的默认值为2152个字节,如果parallel_automatic_tuning为TRUE的话,它的默认值为4096个字节。为了实现最好的性能,应该将这个值设置为它能够支持的最大值。根据使用平台的不同,它可能是16KB、32KB或64KB。可以通过以下公式来计算实例中大池的最小可用内存大小。

 

     large_pool_size>=parallel_max_servers*parallel_execution_message_size*3(RAC环境为4)

 

可以运行下面的查询语句,来显示当前实例中使用的大池的大小。

SQL>select * from v$sgastat where name='PX msg pool';

POOL          NAME            BYTES

------------    -------------    --------

large pool   PX msg pool  1032960

3 并行度

操作内并行使用的从属进程的数量被称为并行度(degree of parallelism, DOP).

可以在对象创建时或创建后通过 parallel子句来设置并行度:

 

CREATE TABLE t (id NUMBER,pad VARCHAR2(1000)) PARALLEL 4

 

ALTER TABLE PARALLEL 2

 

CREATE INDEX ON t (id) PARALLEL 4

 

ALTER INDEX i  PARALLEL 2

 

要禁用并行处理,要么将并行度改为1,要么指定NOPARALLEL子句:

 

ALTER TABLE PARALLEL 1

 

ALTER INDEX i NOPARALLEL

 

可以通过使用提示parallel,no_parallel (在Oracle 9i中为noparallel)、parallel_index和no_parallel_index(在Oracle 9i中noparallel_index)来覆盖在表或索引级别定义的并行度。

 

 何时使用并行操作:

  只有在满足下面的两个条件时才应该使用并行处理。首先,在系统有大量的闲置资源可供使用时才可以使用它,并行处理的目的是通过将单一进程处理的工作分配给多个进程来处理以降低响应时间。其次,SQL语句串行执行时间超过10秒钟,否则,仅仅用来初始化和终止并行环境所需要耗费的时间和资源就可能超过并行化本身能够节省的时间。如果没有满足这两个条件,性能可能会下降而不是提高。

  如果有很多SQL语句需要经常使用并行处理,最好在表和(或)索引级别设置并行度。另一方面,如果只是针对特定的批处理或报表使用并行处理,通常建议在会话级别或通过提示来启用并行处理。

 

你可能感兴趣的:(thread,oracle,sql,工作,OS)