tomcat验证连接的连通性导致数据库响应异常
Oct142014
最近在跟一个优化项目,开发人员反映数据库卡死,登录数据库,发现当前3千多个SESSION,活动的1000多个,对这个轻量级应用来讲,非常不正常。数据库版本9.2.0.4,经查询,这些活动的SESSION基本都在运行同一条SQL。
SELECT NULL AS table_cat, o.owner AS table_schem, o.object_name AS table_name, o.object_type AS table_type, NULL AS remarks FROM all_objects o WHERE o.owner LIKE :1 ESCAPE '/' AND o.object_name LIKE :2 ESCAPE '/' AND o.object_type IN ('xxx', 'TABLE') ORDER BY table_type, table_schem, table_name
这是什么SQL?竟然是从应用程序发出的,感觉很怪异,在网上没有找到有价值的文章,只好向朋友借个MOS帐号,在MOS上找到了原因,参考Liferay Sending Invalid Request To The Database (文档 ID 1492529.1)。
客户使用tomcat访问数据库,原来这个SQL是应用程序检测会话连通性触发的SQL,默认触发时间60秒,卡发人员检查后发现,这个时间被设置成了10秒。下面是MOS的内容:
MOS建议设置更大的值或者禁用这个功能,禁用这个功能后,系统恢复正常。
weblogic中间件也有类似的问题,weblogic通过select 1 from dual来验证会话的联通性,但是在做这个操作之后,会跟着rollback操作,这样user rollback就会很高。对性能影响也很大,因此建议关闭这个功能。
> 客户使用tomcat访问数据库,原来这个SQL是应用程序检测会话连通性触发的SQL———————————请问,为什么要这么做?
2014-12-16 17:33这样做是为了检测中断的连接,如果连接中断,系统会回收相应的资源,就不会将新连接分配到已中断的连接上。很多中间件都有这样的功能。
2014-12-16 17:03