【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的使用个数

相关推荐
程序猿零零漆几秒前
Spring之旅 - 记录学习 Spring 框架的过程和经验(十)基于注解配置的AOP使用
java·学习·spring
虎啊兄弟6 分钟前
RocketMQ面试题
数据库·rocketmq
希艾席帝恩6 分钟前
数字孪生赋能水利行业转型升级的关键路径
大数据·人工智能·数字孪生·数据可视化·数字化转型
J_liaty6 分钟前
MySQL EXPLAIN 深度解析与 SQL 优化实战
数据库·sql·mysql
努力的小郑7 分钟前
SQL 性能避坑:为什么阿里强制禁用 ORDER BY RAND()?
java·mysql·性能优化
W001hhh8 分钟前
数据库实训Day005上午
数据库
金融小师妹10 分钟前
AI驱动的制造业周期分析:基于ISM-PMI动态模型的美12月制造业收缩归因与库存周期预测
大数据·人工智能·深度学习
悟能不能悟10 分钟前
前端调用a服务,a服务将请求用controller+openfeign调用b服务,接口参数中有header参数和body,a服务应该怎么设置,才简单
java·开发语言·前端
2501_9418859611 分钟前
从接口演化到系统自治的互联网工程语法重构与多语言实践思路拆解分享文
java·开发语言
源代码•宸11 分钟前
goframe框架签到系统项目开发(补签逻辑实现、编写Lua脚本实现断签提醒功能、简历示例)
数据库·后端·中间件·go·lua·跨域·refreshtoken