ORACLE ORA-00020与parallel并行

  6月份巡检中,石家庄Oracle数据库告警日志发现ORA-00020: maximum number of processes (300) exceeded,提取告警时间段的AWR,观察发现: PX Deq: Slave Session Stats等待事件

  观察sql统计信息发现insert-select并行的SQL语句,如下所示:

 经过与开发核实,发现在一个存储过程包中,有10条insert-select并行sql语句,并且在存储过程的最后一个insert完成做提交。这导致并行SQL语句申请过多的进程,进而导致数据库进程数超过最大数。以下是配合开发在测试数据库做的insert-select并行测试。
 当去掉/*+parallel*/时,通过观察oracle等待事件,没有发现任何并行的等待事件。

 当设置/*+parallel 4*/时,通过观察oracle等待事件、进程,以及通过sql_id查找出的sql文本发现,在大部分情况下,oracle会小于4+1个进程数的方式运行sql,但是在很短的时间内,oracle启动的进程数仍有可能会大于限制的进程数。如下图,在开4个parallel的情况下,sql运行过程中也出现了启动了8个并行进程的时候。
后台捕获到的insert-select的sql语句:

insert-select(parallel 4 )时等待事件:

insert-select(parallel 4 )时,并行进程峰值有8个进程同时进行

   另外,经过实验验证:当insert-select(parallel)不加并行限制时,default情况下,并行数为cpu(个数)*parallel_threads_per_cpu(每个cpu允许的并行进程数),监控sql执行过程可以发现,在大部分情况下,oracle会小于16+1个进程数的方式运行sql,在很短的时间内,oracle启动的进程数可能会大于限制的进程数。
   因此,在insert-select并行使用过程中,要结合数据库服务器CPU实际情况,对parallel做限制,防止进程数使用达到最大值而导致数据库服务不可用。另外oracle提供一个参数parallel_max_servers=n,即当前实例总共启动的并行服务进程不能超过这个参数的设定值。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29357786/viewspace-2114692/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29357786/viewspace-2114692/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值