问题现象
MyBatis 使用 OceanBase Connector/J V2.4.10 版本驱动,连接 OceanBase 数据库执行 SQL 报错 -5930 maximum open cursors exceeded。
关键日志信息。
[2024-07-01 15:19:48.046475] WDIAG [SQL] handle_ps_prepare (ob_sql.cpp:1641) [3626899][T1008_L0_G0][T1008][xxxxx-xxxxx-xxxxx-xxxxx] [lt=16][errcode=-5930] exceeds the maximum number of ps handles allowed to open on the session(ret=-5930, cur_ps_handle_size=50, open_cursors_limit=50)
应用执行报错信,如下图所示。

问题原因
报错原因为 OceanBase Connector/J V2.x 版本驱动参数 prepStmtCacheSize 默认值为 250,导致同一 session 上同时打开的 PS 句柄数量超过了租户配置项 open_cursors 默认值 50,报错符合预期。
问题的风险及影响
应用执行报错。
影响租户
影响 OceanBase 数据库中的 SYS 租户和 Oracle 租户以及 MySQL 租户。
适用版本
OceanBase Connector/J V2.x 版本。
解决方法及规避方式
调大 open_cursors 参数,或调整应用 JDBC URL 调小 prepStmtCacheSize 参数。