首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ORA-12516但max_utilization未达到极限

ORA-12516但max_utilization未达到极限
EN

Database Administration用户
提问于 2014-04-20 14:11:14
回答 1查看 3.6K关注 0票数 1

我们的应用程序开始产生ORA-12516, TNS:listener could not find available handler with matching protocol stack错误,我正在尝试诊断原因。

工作负载没有改变,所以我想我们可能在应用程序代码中引入了一个bug,但我不明白为什么。最明显的是连接泄漏,或者是未关闭的空闲事务,但是:

  1. 我们使用的是jdbc池(tomcat池),最大活动值为73,低于配置为使用的150个进程。因此,我认为在Oracle达到自己的限制之前,池会抛出一个错误。
  2. select * from gv$resource_limit;这是我得到的:
代码语言:javascript
复制
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查询的末尾,我仍然必须了解;到底发生了什么。欢迎任何建议。

EN

回答 1

Database Administration用户

回答已采纳

发布于 2015-05-11 12:16:56

我认为select 1 from dual;是语法错误。下面是电线上发生的事情:

使用select 1 from dual,连接的生命周期是:

  • 初始设立
  • 第一个查询(验证尚未发生)
  • 回到游泳池
  • 验证:池发送select 1 from dual
  • 数据库回答:ORA-01403: no data found
  • 下一次查询

诸若此类。连接通常不关闭。

然而,对于select 1 from dual;,会发生以下情况:

  • 初始设立
  • 第一个查询
  • 回到游泳池
  • 验证:池发送select 1 from dual;
  • 数据库回答:ORA-00911: invalid character
  • 池用普通FIN数据包终止连接。

然后,下一个查询以刚建立的连接开始。现在,只要负载保持低,您甚至可能不会注意到这一点。但是在高负载的情况下,所有这些重新连接都会耗尽一些数据库资源。哪一个我不知道..。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/63539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档