单 session 上 PS 句柄数量限制

【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】
【 使用版本 】
【问题描述】清晰明确描述问题
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

1.生产环境 企业版3.2.4
2.问题:
生产上,报open_cursors超过数量限制
功能:使用prestatement批量插入数据
语句:
for (i=1;i<=100;i++)
insert into t1;

      batchsave()

3.问题点
同时打开的游标只有一个,为什么会报超过游标数。
查询ob文档.open_cursors 是session打开的游标、ps句柄,但不清楚是二者之和,还是二者是同样的设定值。

官方文档:
https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000442612?back=kb

当单 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 上 cursorPS 句柄数量总和的上限,cursorPS 句柄的数量上限是各自独立统计、控制的(如 open_cursors=100,则单 session 上cursorPS句柄`各自都可打开100个)。
  • open_cursors = 0 代表不设限制,可以作为一种应急的手段。
  • 升级上来的集群,open_cursors 将保持原来的设置,因此请在升级前评估集群单 session 上的 PS 量和 cursor 量。

可以直接联系您的专业支持人员协助排查问题。

我安装的是企业版3.2.4,我们是乙方,没有支持人员哦

走ps cursor都会走ps,所以本质上打开一个curosr等价于打开一个ps句柄。不同之处在于是分开检查报错的,例如open_cursors限制是100,你打开了50个cursor跟50个ps句柄,下次再打开一个cursor或者ps句柄时,这个时候ps句柄检查会报错,因为超过100了。cursor的检查不会报错因为cursor只有50个。