2010-10-08 73 views
0

我在我的應用程序中使用BasicDatasource。此應用程序正在處理大量的原始數據。有時1個查詢可能需要15分鐘以上。 (使用MySQL作爲分貝)Basicdatasource連接超時問題(使用mysql)

這是我的問題,我從池獲得連接,然後執行它的幾個查詢。但是,當我使用相同的連接超過15分鐘時,出現下面的錯誤。在mysql服務器中,max_wait被設置爲180小時,因此保持連接處於活動狀態並且沒有防火牆規則設置爲終止超過一定時間的連接是不成問題的。

你在想什麼?

The last packet successfully received from the server was 928,374 milliseconds ago. The last packet sent successfully to the server was 928,374 milliseconds ago. 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
     at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
     at com.mysql.jdbc.Util.handleNewInstance(Util.java:409) 
     at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1118) 
     at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3055) 
     at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2941) 
     at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3489) 
     at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959) 
     at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113) 
     at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2562) 
     at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1664) 
     at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1583) 
     at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) 
     at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) 
     at com.adsclick.logs.cron.adsclickv261.global.ProcessBase.executeUpdate(ProcessBase.java:766) 

回答

3

可嘗試:

  1. setMaxWait(-1)上的BasicDataSource。這表明它會無限期地等待連接。

  2. 檢查MySQL服務器上的wait_timeout設置爲默認的8h。

  3. 你的JDBC URL

  4. setTestOnBorrow(true)上的BasicDataSource設置?autoReconnect=true。這將阻止它發佈陳舊的連接,但會增加你的應用程序的開銷(儘管如果你已經有這麼長的單個查詢,你可能甚至不會注意到這個部分)。

一般來說,我覺得繼續重新使用連接是個好主意。對我來說,擁有一個泳池的關鍵是我不必那樣做。

您的查詢是否是事務性的?是否有一些非常長的查詢鎖定了主表?

+0

感謝您的回答 – WorM 2011-12-28 12:35:43