前段时间做一个后台系统,在开发测试环境应用运行的非常良好,没有出现任何的问题。
当测试完成上预发布时问题出现了,应用运行非常缓慢,一直停在某一个地方不执行,最后抛一个nested exception is java.sql.SQLException: 关闭的连接的异常,很时郁闷。刚开始碰到这个部题一直以为是我的连接池出现了问题,应用中事务太大,导致死锁等引起的。
网上也搜了一个遍,找到的答案基本都是说连接池配制有误,我用的C3P0的连接池,DB用的是oracle的,但一遍遍查应用,检查连接池配制,把超时设的很长各种方法都用尽了,最后还是不OK!
最后居然怀疑事务太大,所以就把设计做了变更,开发测试都没问题,但一上线,运行结果还是一样的问题,一度限入了僵局,难道是DB出现了问题?开发库测试库都是OK的。只能把问题定义到DB上去了
用select object_name,machine,s.sid,s.serial#
from v$locked_object l,dba_objects o ,v$session s
where l.object_id = o.object_id and l.session_id=s.sid;
查了一下数据库,发现有张表未做提交,可会话已结束,这就是应用已死提,对数据库操作未做提交!奇怪。。
没办法,只能开始慢慢查询,非常简单,我把应用启动起来,然后让DBA在DB上观看一下执行计划,问题找到了。
DBA回复:
delete from table_name where id = :1 ;