1 问题描述
推送数据前台报错:“语句句柄个数超上限或系统内存不足”
2 原因分析
系统层排查:
2.1、系统内存:
2.2、资源限制
2.3、根据数据库实例的PID进程查询使用的文件数
3 数据库层:
3.1、 查询数据库配置
最大连接数MAX_SESSIONS
单个会话最大句柄数MAX_SESSION_STATEMENT
3.2、数据库当前连接数:
3.3、查询句柄数
select sess_id,sql_text,state,n_stmt "句柄的容量",n_used_stmt as "使用的句柄数",curr_sch,user_name,trx_id,create_time,clnt_type,clnt_ip,run_status from v$sessions order by 使用的句柄数 desc ;
3.4、统计句柄数
select session#,count(stmt_id) from v$open_stmt group by session# order by 2 desc;
4 问题复现
开发排查sql拼接的问题导致,数据库层发现的sql:
SELECT taxpayerid FROM bd_customer WHERE pk_financeorg = ? AND dr='0'
5 解决方案
临时解决方案,将句柄数超过两万的sql kill掉
sp_close_session(会话);
最终解决方案:
应用开发人员提供的原始程序:语句个数超量,数据量多的时候,在逻辑里面加一层数据库连接完,关闭连接的操作,问题解决;
String updateInvoiceSuccessData = "SELECT DEF9 FROM sscivm_invoice
文章
阅读量
获赞