我们的应用程序开始产生ORA-12516, TNS:listener could not find available handler with matching protocol stack错误,我正在尝试诊断原因。
工作负载没有改变,所以我想我们可能在应用程序代码中引入了一个bug,但我不明白为什么。最明显的是连接泄漏,或者是未关闭的空闲事务,但是:
select * from gv$resource_limit;这是我得到的:NST_ID RESOURCE_NAME CURRENT_UTILIZATION MAX_UTILIZATION INITIAL_ALLOCATION LIMIT_VALUE
---------- ------------------------------ ------------------- --------------- ------------------ -----------
1 processes 32 40 150 150
1 sessions 32 45 248 248
...因此,最大利用率似乎从未达到极限。
有人知道如何追踪这件事吗?
编辑:我在这方面取得了一些进展。事实证明,tomcat池有一个查询来检查连接是否正常。此查询被配置为select 1 from dual;。请注意半列,因为这是罪魁祸首:删除它修复了应用程序。在check查询的末尾,我仍然必须了解;到底发生了什么。欢迎任何建议。
发布于 2015-05-11 12:16:56
我认为select 1 from dual;是语法错误。下面是电线上发生的事情:
使用select 1 from dual,连接的生命周期是:
select 1 from dualORA-01403: no data found诸若此类。连接通常不关闭。
然而,对于select 1 from dual;,会发生以下情况:
select 1 from dual;ORA-00911: invalid character然后,下一个查询以刚建立的连接开始。现在,只要负载保持低,您甚至可能不会注意到这一点。但是在高负载的情况下,所有这些重新连接都会耗尽一些数据库资源。哪一个我不知道..。
https://dba.stackexchange.com/questions/63539
复制相似问题