因實際查詢需要,系統設置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
提交
取消