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完成做提交。
  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,即当前实例总共启动的并行服务进程不能超过这个参数的设定值。

目录
相关文章
|
5月前
|
SQL 监控 Oracle
关系型数据库Oracle并行执行
【7月更文挑战第12天】
142 14
|
5月前
|
SQL Oracle 关系型数据库
关系型数据库Oracle并行查询
【7月更文挑战第12天】
118 15
|
5月前
|
Oracle 关系型数据库 数据处理
|
5月前
|
SQL 监控 Oracle
|
5月前
|
SQL 监控 Oracle
|
7月前
|
SQL 消息中间件 关系型数据库
实时计算 Flink版产品使用合集之flink-cdc-oracle 可以并行读取吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
SQL 存储 Oracle
flink-cdc-oracle 可以并行读取吗
flink-cdc-oracle 可以并行读取吗, 同步1000万数据,我这边半天没同步完, 这个有什么优化策略吗?这个怎么设置先全量并行读,然后增量 是flink sql跑的?
112 1
|
SQL 监控 Oracle
Oracle优化08-并行执行
Oracle优化08-并行执行
132 0
|
SQL Oracle 关系型数据库
Oracle并行和并发收集统计信息
Oracle并行和并发收集统计信息
375 0

推荐镜像

更多