我们有一个使用瘦 JDBC 驱动程序在 Weblogic 上针对 Oracle 11g DB 运行的 JavaEE 应用程序。最近我们在生产中发生了一系列事件,其中更新和插入某个表被卡住或花费比正常时间更长的时间,没有明显的原因。这导致应用程序使用越来越多的数据库连接(通常在连接池中处于空闲状态),数据库 CPU 和并发性猛增(如 OEM 中所见),整个数据库陷入停顿。在这些事件中,DBA 找不到插入和更新卡住的任何原因(没有数据库锁)。他们确实看到了很多“来自客户端的 SQL*Net 等待消息”事件。
他们的理论是,应用程序(jdbc 客户端)在插入/更新语句期间以某种方式卡住,原因与数据库无关,同时没有确认数据库对这些语句的响应。事实上,应用程序继续发出越来越多的这些语句,占用了越来越多的连接,这是 CPU 和并发性猛增的原因,导致数据库无响应。
我不相信 - 如果所有会话都忙于等待客户,CPU 怎么会这么高?我们无法始终如一地重现这些事件,所以我们真的在这里处于黑暗中......
有没有人见过这样的事情或有任何想法,建议这可能是由什么引起的?
谢谢