因实际查询需要,系统设置40个线程进行数据查询,每个线程查询的时间会很长,都需要几十分钟的查询时间,当查询时间运行到一定的时间后,有些线程就卡在statement.executeQuery(),用jvisuallvm查看线程的执行点停留在java.net.SocketInputStream.socketRead0,再查看ORALCE的V$SESSION,这些线程提交的查询都已执行完成了,TOMCAT日志也没有任何异常记录,各位大神帮帮忙,看下问题会出在哪里。
3 回答
哆啦的时光机
TA贡献1779条经验 获得超6个赞
这个不关oracle底层的事情,并发查询是数据库的最基本功能之一。估计是你用ODBC API方式不对或者你的ODBC不支持数据库的多线程处理。从你的描述来看,串行可以,并行不行,应该是你用的API库不支持多线程并行。
HUWWW
TA贡献1874条经验 获得超12个赞
oracle的会话已经结束,而数据库连接池并没有接收到,有可能是因为odbc设置的最大等待时间比oracle的会话时间短,建议优化sql或修改等待时间尝试
翻过高山走不出你
TA贡献1875条经验 获得超3个赞
这个现象很像tcp连接已经非正常断掉,确认一下java客户端到oracle中间的网络设备,会不会在socket限制一定时间后主动切断?
客户端的socket连接是ESTABLISHED状态,因为没收到tcp关闭相关的包,但是oracle端尝试输出结果的时候发现链接已经有问题了,用netstat看看客户端和服务端的连接数是不是对的上,对不上就是我说的这种情况了。
添加回答
举报
0/150
提交
取消