为了账号安全,请及时绑定邮箱和手机立即绑定

JAVA 多线查询ORACLE线程卡住

JAVA 多线查询ORACLE线程卡住

子衿沉夜 2018-07-15 19:30:16
因实际查询需要,系统设置40个线程进行数据查询,每个线程查询的时间会很长,都需要几十分钟的查询时间,当查询时间运行到一定的时间后,有些线程就卡在statement.executeQuery(),用jvisuallvm查看线程的执行点停留在java.net.SocketInputStream.socketRead0,再查看ORALCE的V$SESSION,这些线程提交的查询都已执行完成了,TOMCAT日志也没有任何异常记录,各位大神帮帮忙,看下问题会出在哪里。
查看完整描述

3 回答

?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

这个不关oracle底层的事情,并发查询是数据库的最基本功能之一。估计是你用ODBC API方式不对或者你的ODBC不支持数据库的多线程处理。从你的描述来看,串行可以,并行不行,应该是你用的API库不支持多线程并行。


查看完整回答
反对 回复 2018-07-26
?
HUWWW

TA贡献1874条经验 获得超12个赞

oracle的会话已经结束,而数据库连接池并没有接收到,有可能是因为odbc设置的最大等待时间比oracle的会话时间短,建议优化sql或修改等待时间尝试


查看完整回答
反对 回复 2018-07-26
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

这个现象很像tcp连接已经非正常断掉,确认一下java客户端到oracle中间的网络设备,会不会在socket限制一定时间后主动切断?

客户端的socket连接是ESTABLISHED状态,因为没收到tcp关闭相关的包,但是oracle端尝试输出结果的时候发现链接已经有问题了,用netstat看看客户端和服务端的连接数是不是对的上,对不上就是我说的这种情况了。


查看完整回答
反对 回复 2018-07-26
  • 3 回答
  • 0 关注
  • 992 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信