问题描述
近日,在生产系统出现了三次同样的问题:问题如下:有个每十分钟起的一个java线程,这个线程启动一个任务,任务的作用是通过spring3.1.1的jdbc包的连接池向oracle(11gR2版本)小版本号为11.2.0.1,发送多个查询,其中某个查询假如此查询会返回10w条记录,但是查询瞬间会先返回8万条记录,在整整两个小时后会将剩下的2w条数据给完整返回.上述oracle出现的情况是oracle工程师经过后台分析和看日志之后给出的详细数据,整整两个小时后剩余的数据才返回.此种情况在生产系统上已经连续出现3次.问题的核心是:1.启动查询的线程会每10分钟启动一次多批量查询任务2.在多次启动的线程中,会偶尔出现一次上述我描述的现象请问大神们,这种现象是处于何因?听oracle的工程师说,oracle有默认两个小时内唤醒线程的机制.但是oracle工程师最终也未能给出问题的原因和解决问题的办法,跪求大神给与好的解决办法和问题的原因??在线急等~~~
解决方案
解决方案二:
最权威的答案就是日志,或者直接使用sqlplus执行,看看能不能重现,数据库在本地?是不是网络问题,最后补充一句,你们的oracle工程师不给力
解决方案三:
oracle工程师是oracle公司派过来的~数据查询1.4秒返回,但是返回的数据分两次回来的,两次的间隔时间是两个整小时
解决方案四:
我是LZ的同事,补充一下我们目前看到的现象:1.应用和数据库之间有防火墙,但设置了36小时连接超时。由于应用每天定时重启,所以不会是防火墙把连接掐断的。且网络硬件及防火墙的日志都没报错,应该不是网络的问题2.hang住的查询经DBA确认,当时已执行完毕,用时1.44秒,通过AWR报告也可以看出,没有执行超过1分钟的SQL3.通过网络监控抓包工具,我们分析了应用和数据库之间的所有网络包(即异常发生的前后两分钟和2小时后数据再次返回的前后两分钟),发现包含SQL的语句发送至数据库后1.5秒即发回response的结果集(实际上是JDBCdriver去取),但没有取完就停住了。2小时后,oracle回了一个心跳包(keepalive),JDBCdriver继续取结果集直至完成。hang住的应用threaddump可见4L