【YashanDB知识库】stmt未close,导致YAS-00103 no free block in sql main pool part 0报错分析

问题现象

问题单:YAS-00103 no free block in sql main pool part 0,YAS-00105 out of memory to allocate hash table of size = 256

现象:业务处理sql时,报错YAS-00103 no free block in sql main pool part 0

问题风险及影响

业务处理报错,影响功能使用

问题影响版本

客户版本:22.2.4.1

问题发生原因

表现原因:sql pool空间不足,申请不到报错。

根原因:stmt使用后,未调用close,session长时间未关闭。open coursor无法循环使用,导致该问题。

解决方式及规避方法

规避方法:增大share_pool_size;alter system set share_pool_size=xxx scope=spfile;

解决方案:stmt调用,不使用后调用close关闭。

问题分析和处理过程

复现方案:

如上报错

分析

查看v$open_cursor视图

每个cursor的状态都是0,0是idle状态,无法循环使用。

代码分析:

复制代码
typedef enum EnAnlStmtStatus {
    STMT_STATUS_IDLE = 0,
    STMT_STATUS_PREPARE = 1,
    STMT_STATUS_EXECUTE = 2,
    STMT_STATUS_FETCH = 3,
    STMT_STATUS_FREE = 4,
} AnlStmtStatus;



没有close的stmt,并且执行完毕这条sql语句了,就是idle。

close的stmt,则是free状态。只有free状态的stmt可以复用。

cursor连接不会销毁,只有session断开连接才会销毁,每个session用open_cursors控制最大的cursor数量。

经验总结

v$global_mpool //查看sql pool使用情况

v$open_cursor //查看stmt的cursor使用状况

OPEN_CURSORS //配置session最大cursor的使用个数

相关推荐
hero.fei几秒前
排查redis出现报错ERR redis temporary failure
数据库·redis·缓存
诸葛大钢铁2 分钟前
Java实现Excel文件合并
java·windows·excel
黎明丶之前5 分钟前
Spring Cloud Gateway 升级与 Bucket4j 限流实践
java·spring cloud
野犬寒鸦9 分钟前
MySQL复习记录Day01
数据库·后端
程序员木圭10 分钟前
05-告别逻辑混乱!Java 流程控制让代码学会"判断和循环"
java·后端
ward RINL14 分钟前
Spring boot启动原理及相关组件
数据库·spring boot·后端
yaaakaaang14 分钟前
三、抽象工厂模式
java·抽象工厂模式
kongba00715 分钟前
复刻 Claude Code 项目御马术缰绳系统 harness engineering 落地蓝图
java·linux·服务器
tERS ERTS17 分钟前
Spring Cloud gateway 路由规则
java
ZUNr117 分钟前
手写一个迷你版 @Column:注解到底是怎么工作的?
java