Chinaunix首页 | 论坛 | 博客
  • 博客访问: 18892
  • 博文数量: 6
  • 博客积分: 15
  • 博客等级: 民兵
  • 技术积分: 15
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-22 10:59
文章分类
文章存档

2014年(2)

2013年(4)

我的朋友

分类: Oracle

2013-04-14 14:30:39

原文地址:parallel 并行技术(2) 作者:十字螺丝钉

并行技术(1)  http://blog.chinaunix.net/uid-23284114-id-3187151.html
并行技术(3)  http://blog.chinaunix.net/space.php?uid=23284114&do=blog&id=3190153 

  并行执行服务器数量的调整:Variations in the Number of Parallel Execution Servers
        1.oracle 实例(也就是内存)有明显变化,并行服务池中的并行执行服务器数量自动调整;
        2.并行操作明显增加,oracle会创建额外的并行服务器来满足需要。但是,并行执行服务器的数量绝对不会超过参数PARALLEL_MAX_SERVERS的设定值。
        3.并行操作减少,oracle终止空闲的并行执行服务器。但是,并行执行服务器的数量不会低参数PARALLEL_MIN_SERVERS的设定值。
       
        归纳成一个公式:
        PARALLEL_MIN_SERVERS <= 并行执行服务器的数量 <= PARALLEL_MAX_SERVERS

    并行执行服务器数量不足时咋处理:Processing Without Enough Parallel Execution Servers
        oracle执行并行操作时,至少需要2个并行执行服务器。        
        比如当前只有5个并行执行服务器可用,而一条SQL需要30个并行执行服务器,执行该SQL的后果是执行速度很慢。可以通过设定参数PARALLEL_MIN_PERCENT(百分比)来解决这个问题。该参数使用于DML、DDL以及QUERY。    
        
        SQL申请并行执行服务器的数量*PARALLEL_MIN_PERCENT <= 当前可用并行执行服务器数量
        举个例子,一条SQL执行需要50个并行执行服务器,我们设定PARALLEL_MIN_PERCENT 值为20,那么该SQL最少需要50*20%=10个并行执行服务器。如果申请不到10个并行执行服务器进程,oracle就会报ora 12827错误。
        当参数PARALLEL_MIN_PERCENT设定为null时,SQL执行时,至少获取2个并行执行服务器。



模拟ORA-12827错误

SQL> create pfile from spfile;

File created.

SQL> shutdown immediate

修改初始化参数文件
cd $ORACLE_HOME/dbs
mv spfileemrep.ora spfileemrep.ora.bk
vi initemrep.ora
---
*.parallel_max_servers=5
*.parallel_min_servers=2
*.parallel_min_percent=60
--

SQL> startup
ORACLE instance started.

生效
SQL> show parameter parallel
NAME                     TYPE            VALUE
------------------------------------ ---------------------- ------------------------------
parallel_max_servers             integer            5
parallel_min_percent             integer            60
parallel_min_servers             integer            2



表的并行度设为10
alter table d_test parallel 10;

现在表d_test的并行度设定为10,系统设置的parallel_min_percent为60
10*60%=6 > parallel_max_servers
也就是说至少有6个并行执行服务器,而现在parallel_max_servers只有5个

执行一条SQL
SQL> select count(*) from d_test;
select count(*) from d_test
                     *
ERROR at line 1:
ORA-12827: insufficient parallel query slaves available

报ORA-12827错误了。

把d_test的并行度设为8
alter table d_test parallel 8;

8*60%=4.8 < parallel_max_servers=5

再次执行SQL,不再报错
SQL> select count(*) from d_test;

  COUNT(*)
----------
  21869366


并行技术(1)  http://blog.chinaunix.net/uid-23284114-id-3187151.html
并行技术(3)  http://blog.chinaunix.net/space.php?uid=23284114&do=blog&id=3190153
阅读(1310) | 评论(0) | 转发(0) |
0

上一篇:dbms_metadata用法

下一篇:parallel 并行技术(1)

给主人留下些什么吧!~~