如何配置Oracle并行处理(下)

日期: 2010-12-16 作者:Guy Harrison翻译:冯昀晖 来源:TechTarget中国 英文

接上文:如何配置Oracle并行处理(上)   “Parallel”关键字   “PARALLEL ”关键字可以调用并行处理。在最简单的格式中,该关键字不需要参数,请看下面的例子:   图5 增加DOP引起系统CPU等待时间段的增加。   这种写法是合法的,但是并非总是必须在关键字中指定表名或别名:   SELECT /*+ parallel(s) */ * FROM sh.sales s   该关键字可以请求指定的DOP值:   SELECT /*+ parallel(s,8) */ * FROM sh.sales s;   “NOPARALLEL ”关键字可以被用来禁用并行处理:   SE……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

接上文:如何配置Oracle并行处理(上)

  “Parallel”关键字

  “PARALLEL ”关键字可以调用并行处理。在最简单的格式中,该关键字不需要参数,请看下面的例子:

  图5 增加DOP引起系统CPU等待时间段的增加。

  这种写法是合法的,但是并非总是必须在关键字中指定表名或别名:

  SELECT /*+ parallel(s) */ * FROM sh.sales s

  该关键字可以请求指定的DOP值:

  SELECT /*+ parallel(s,8) */ * FROM sh.sales s;

  “NOPARALLEL ”关键字可以被用来禁用并行处理:

  SELECT /*+ noparallel */ COUNT ( * ) FROM sales;

  在11g R2中,“AUTO”选项允许你请求“AUTO”设置“PARALLEL_DEGREE_POLICY”用来计算DOP:

  SELECT /*+ parallel(auto) */ COUNT ( * ) FROM sales;

  对于临时查询的执行,你可能想设置明确的DOP。然而,对于内嵌到应用程序中的SQL,这可能不是个好主意,因为该SQL不太可能适应计算机配置(实例有更多可用CPU),负载(更多并发会话)或者配置(并行伺服数量或者默认DOP)的变更。对于嵌入的SQL,最好的做法可能是省略明确的DOP或者利用“AUTO”关键字(在Oracle 11g R2和更高版本中支持)。

  并行配置参数

  确定最佳DOP值是一项艰巨的任务,在考虑到并发系统的时候尤其如此。幸运的是,Oracle为使这项工作自动化投入了巨大的努力。每次Oracle发布都增加了智能层面的自动化并行配置。在一般情况下,在尝试手工配置自动处理之前,你应该试试Oracle自动分配功能。

  不过,进行重要的调整是可能的;下面列出了重要的配置参数,你可以利用它们调整优化并行SQL:

parallel_adaptive_multi_user

 

 

当设置为“TRUE”时,Oracle将根据该系统的负载调整DOP。在负载较重的系统中,Oracle将降低请求的或者默认的DOP。

parallel_degree_limit

 

在Oracle 11g和更高版本中,(该参数)设置对DOP能达到的绝对值限制。CPU阻止DOP超过的值是由“parallel_threads_per_cpu”参数指定的。IO值设置了最大的IO限制,是通过运行存储过程“DBMS_ RESOURCE_MANAGER.CALIBRATE_IO”得到的。“AUTO”允许Oracle自己选择一个值。对应于具体DOP值的整数值也可能被指定。

parallel_degree_policy

 

在11g R2和以后的版本中,这个参数控制DOP计算的方式。设置为“MANUAL”值等价于11.1以及更早版本中的处理方式。如果设置为“AUTO”,DOP将基于SQL语句的操作类型和表大小进行计算。“AUTO”还可以使并行查询从缓存中提取数据,而不是利用直接路径IO,而且如果请求的DOP执行不是立即可用的话将会把并行处理排入队列等待。

parallel_execution_message_size

 

在参与并行处理的进程之间设置用于交互的缓存区大小。

parallel_force_local

对于Oracle 11g R2之后的版本,这个参数如果设置为“TRUE”,会阻碍RAC集群上的多实例并行机制。

parallel_io_cap_enabled

这个11g的参数如果设置为“TRUE”的话,将把DOP限制为Oracle认为IO子系统可以支持的值。要使用这个参数,你需要首先用存储过程“DBMS_RESOURCE_MANAGER.CALIBRATE_IO”算出IO限制。

parallel_max_servers

可以启动并行服务器的最大数量。这提供了对于可以执行并发并行操作数量的绝对限制。

parallel_min_percent

如果设置为非零值,这个参数决定了对于查询DOP接受的最小值。由于系统负载或者其它也使用并行服务器池的并行处理的原因,如果请求的DOP或者设定的DOP不能被提供出来,DOP将只会降低“PARALLEL_MIN_ PERCENT.”的值。例如,如果你的查询请求DOP值为8,而只有5个可用(5 / 8 = 62%),那么如果“PARALLEL_ MIN_PERCENT”值小于62,你的查询将会并行执行。如果“PARALLEL_ MIN_PERCENT”值大于62,你的语句将出错终止,或者如果“PARALLEL_DEGREE_ POLICY”被设置为“AUTO”,那将会把该任务放到队列后续执行。

parallel_min_servers

并行服务器的最小数量,该数值会在数据库第一次启动时被初始化。

parallel_min_time_threshold

指定某个SQL语句需要的运行时间超过多少(单位是秒)就自动并行化处理。如果对SQL语句运行时间的估算值超过了这个门槛,Oracle就自动并行化处理该SQL。默认值“AUTO”会让Oracle来自动计算一个值。

parallel_threads_per_cpu

设置每个CPU可以应用的并行线程数量。Oracle通常会限制DOP以便不会超过这个限制。

相关推荐