我用谷歌搜索了一下,我的印象是
来自客户端的 Sql*net 消息
表明 Oracle DBMS 正在等待客户端向 DBMS 发送新命令,因此在此事件中花费的任何时间都应该是客户端时间,而不是消耗 DB 服务器 CPU。换句话说,通常情况下,如果一个会话在这个事件中,它应该是“不活跃的”而不是“活跃的”。
令我们困惑的是,从本周开始(在我们开始使用连接池 [我们使用 dbcp] 之后),我们偶尔会在
来自客户端的 Sql*net 消息
事件并在较长时间内同时显示“活动”。在这段时间内,数据库上的 CPU 使用率很高。
任何人都可以阐明这意味着什么?如果数据库会话正在等待客户端发送消息,它可以是“活动”并消耗 CPU 周期的?
看来我们找到了罪魁祸首。在最近的应用服务器升级之后,我们无意中将 ojdbc14 和 ojdbc6 jar 都包含到了我们的部署中,显然,jvm 为其 Oracle DB 驱动程序选择了 ojdbc14。由于我们手动删除了 ojdbc14,因此在过去 24 小时内没有再次出现此问题。我认为 ojdbc14 不再受到官方支持,因此它可能会导致各种有趣的问题。
我们的下一步是首先找出 ojdbc14 是如何潜入部署的。
如果会话处于活动状态并且处于空闲事件中,则它可能在 CPU 上而不是等待。您可以运行如下查询来确定
但是这种数据收集是自动完成的,并收集在 v$active_session_history 中,因此您只需查询 v$active_session_history 即可查看会话实际在做什么