决策系统一个查询sql,在跑的时候报:
ERROR at line 1:
ORA-12801: error signaled in parallel query server P041
ORA-00018: maximum number of sessions exceeded
背景介绍:一个表查询的sql,数据仓库星型模型,四张表关联,其中一张事实表开启了并使属性,并行度是default
这个错误从字面上意思是:到达了session的最大连接数,猜想应该是并行调度器在扩展并行进程的时候到达了processes定义的最大连接数导致的(在扩展到41的时候)
于是测试一下,采用hint,取消掉并行查询:
select stat_dim_date.month_name as a1,
......
错误提示消失
查看系统参数:
SQL> show parameters processes
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
processes integer 200
SQL> show parameters parallel
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
parallel_max_servers integer 187
在允许的最大连接数200的前提下,设定的系统最大并行度为187,于是并行执行的时候很容易达到200,使得并行调度器无法再分配行的进程。
两个方案解决此故障:加大processes;减少parallel_max_servers
由于这是个在线系统,能避免不重启服务尽量避免,查看这两个参数属性:
SQL> select a.name,a.ISSYS_MODIFIABLE from v$parameter a where a.NAME in ('parallel_max_servers','processes');
NAME ISSYS_MOD
-------------------------------------------------------------------------------- ---------
processes FALSE
parallel_max_servers IMMEDIATE
还是修改parallel_max_servers吧。
总结:这算不算是一个oracle考虑不周的地方呢?