4个节点的oracle集群的每个用户的会话总数

时间:2018-05-17 19:02:54

标签: oracle oracle11g

我们拥有Oracle 11g Enterprise 64位,它是一个包含4个节点的集群。 有一个用户限制为96 sessions_per_user。我们认为此用户的会话总限制为4个节点* 96 = 384个会话。但现实只不过是180届。在大约180个会议开幕后,我们得到了错误:

  

ORA-12850:无法在所有指定的实例上分配从属:4   需要,3分配ORA-12801:在并行查询中发出错误信号   服务器P004,实例3599
  ORA-02391:超过同步   SESSIONS_PER_USER限制

问题是为什么总限制只有180个会话?为什么不是4 * 96?

我们非常感谢您的回答。

1 个答案:

答案 0 :(得分:1)

虽然我无法记录,但快速测试表明您的最大总会话数等于SESSIONS_PER_USER *节点数是正确的。但是,只有会话在节点之间均衡平衡时才会出现这种情况。每个实例仍然执行该限制。

检查要连接的服务,以及该服务是否在所有节点上都可用。运行这些命令以查看首选节点和实际运行的节点。可能存在故障,服务迁移到一个节点,并且从未迁移回来。

# Preferred nodes:
srvctl config service -d $your_db_name
# Running nodes:
srvctl status service -d $your_db_name

或者可能是连接硬连线到特定实例。这通常是一个错误,但有时候需要运行PL / SQL调试器。运行此查询以查看并行会话的生成位置:

select inst_id ,gv$session.* from gv$session;

同时检查参数PARALLEL_FORCE_LOCAL并确保它未设置为true:

select value from gv$parameter where name = 'parallel_force_local';

或者计算会话数量可能存在问题。会话数通常超过所要求的并行度。例如,如果查询排序或散列,Oracle将使并行会话数加倍,一组用于生成行,另一组用于生成行。您确定要求并行会话的数量吗?

另外,在我的测试中,当我在没有足够的SESSIONS_PER_USER的情况下运行并行查询时,它只是降级了我的查询。我不确定你的数据库为什么会抛出错误。 (也许你有并行排队和超时设置?)

最后,看起来您正在使用极高程度的并行性。您确定需要数百个并行流程吗?

我可能没有想到很多其他潜在的问题。并行性和RAC很复杂。