首批通过分布式安全可靠测评,为关键业务系统打造
单 session 上 PS 句柄数量限制
更新时间:2026-05-29 08:46
本文介绍 OceanBase 数据库中单 session 上 PS 句柄数量的限制。
部分业务模型会打开大量的 PS,从而导致 OBServer 500 租户 PsSessionInfo 模块内存占用较大(如 20G)。原生 ORACLE 中也存在这个问题,其通过 限制单个 session 最多可打开的 PS 数量,超限报错 的方式来解决。OceanBase 数据库从 V3.2.4 版本开始也采用了这种方法。
从 OceanBase 数据库从 V3.2.4 版本开始,单 session 上 PS 句柄数量可设置上限,该上限值与 “单 session 上游标 cursor 数量” 共同使用配置项 open_cursors 控制(取值范围:[0,65535],默认:50)。
当单 session 上 PS 句柄数量超过 open_cursors 时,OceanBase 数据库日志中会有 WARN 级别报错:exceeds the maximum number of ps handles allowed to open on the session(ret=-5930......)。(由于借用了 open_cursors 控制,所以错误码还是 -5930:maximum open cursors exceeded。)
注意
open_cursors不是单 session 上cursor与PS句柄`数量总和的上限,cursor与PS 句柄的数量上限是各自独立统计、控制的(如 open_cursors=100,则单 session 上cursor与PS句柄各自都可打开100个)。- open_cursors = 0 代表不设限制,可以作为一种应急的手段。
- 升级上来的集群,
open_cursors将保持原来的设置,因此请在升级前评估集群单 session 上的PS量和cursor量。
当遇到 PS 数量超限时,可以尝试以下方法解决:
当升级遇到
PS数量超限时,可以设置 open_cursors = 0 来应急。当业务正常执行遇到
PS数量超限时,请检查业务逻辑或确认是否为 OB 链路产品的已知缺陷。
适用版本
OceanBase 数据库 V3.2.4 (oceanbase-3.2.4.0-100000072022102819) 所有版本和 V4.1.0 BP3 (oceanbase-4.1.0.2-103000072023081111) 及之后的版本。