【发布时间】:2012-12-26 17:02:06
【问题描述】:
我们有一个使用瘦 JDBC 驱动程序在 Weblogic 上针对 Oracle 11g DB 运行的 JavaEE 应用程序。 最近我们在生产中发生了一系列事件,其中更新和插入某个表被卡住或花费比正常时间更长的时间,没有明显的原因。 这导致应用程序使用越来越多的数据库连接(通常在连接池中处于空闲状态),数据库 CPU 和并发性猛增(如 OEM 中所见),整个数据库陷入停顿。 在这些事件中,DBA 找不到插入和更新卡住的任何原因(没有数据库锁)。他们确实看到了很多“来自客户端的 SQL*Net 等待消息”事件。
他们的理论是,应用程序(jdbc 客户端)在插入/更新语句期间以某种方式卡住,原因与数据库无关,同时没有确认数据库对这些语句的响应。事实上,应用程序继续发出越来越多的此类语句并占用越来越多的连接,这就是 CPU 和并发性猛增的原因,导致数据库无响应。
我不相信 - 如果所有会话都忙于等待客户端,CPU 怎么会这么高? 我们无法始终如一地重现这些事件,所以我们在这里真的处于黑暗之中......
有没有人看到过这样的事情,或者对这可能是由什么引起的有任何想法和建议?
谢谢
【问题讨论】:
-
也许正在寻找类似尝试扩展表空间的东西——也许是磁盘空间有问题?
-
Oracle 是否与 WebLogic 在同一台服务器上运行?还是在不同的服务器上?
-
一百万个理由,从字面上看...我会像@randy 一样专注于操作系统、磁盘/文件系统(你没有使用 ZFS/NAS 是吗?)等,但我会只能胡乱猜测,而且很可能是错的。在发生这种情况时,如果没有对您的盒子的 root 访问权限,我看不到这里的任何人将如何能够有意义地帮助您。当这种事情发生时,我通常会找几个系统管理员和一个 DBA 或 2 个并确保每个人都坐在一起……我们这里没有那种奢侈。你想要什么样的答案?
-
@code:数据库运行在专用服务器上。
-
@Ben:你当然是对的,问题是 DBA 和系统管理员在发生这种情况时查看了系统(并且发生了好几次),我们仍然没有有意义的回答...我想我只是希望有人能提出一些我们没有想到的建议...
标签: oracle jdbc database-administration