[英]Java stuck waiting for slow MySQL query that has finished executing server side, no error thrown
我正在使用Java程序查詢遠程MySQL服務器。 查詢是select語句,可能需要一分鍾到半小時的時間。 返回的數據大小始終相同(我在計算行數)。
該程序通常可以正常執行,但有時會卡在較長的查詢之一中。 它不會中止(java程序仍在“運行”)並且不會引發任何錯誤。 當我檢查MySQL服務器進程列表時,查詢未列出,並且錯誤日志也為空,因此我假設它已完成執行。
我在每次查詢之前和之后都直接打印,因此我可以確定程序被查詢卡住了。
我以為是連接超時問題,所以我將autoreconnect設置為true,但這沒有幫助。 由於沒有引發錯誤,我對如何解決此問題一無所知。
Java代碼如下所示:
Class.forName("com.mysql.jdbc.Driver");
DBConnection=DriverManager.getConnection(DBConnectionURL);
DBStatement=DBConnection.createStatement();
// being of loop
System.out.println("starting query " +selectQuery);
qA=DBStatement.executeQuery(selectQuery);
System.out.println("finished query " +selectQuery);
// do sth with query
// end of loop
如果程序卡住,則最后的輸出始終是starting query [..]
根據您粘貼的Java代碼,錯誤是這樣的:
您正在調用MySQL並打印“開始查詢....”,則發生以下兩種情況之一:查詢有效,並且您看到“完成查詢...”,或者引發異常,然后顯示“完成查詢..” ”被跳過,執行轉到處理異常的代碼。
什么樣的異常會導致這種情況:
如果selectQuery是動態修改的,則它可能是格式錯誤的查詢異常。
如果selectQuery不是動態的並且可以使用,則可以為其參數。
如果selectQuery良好且參數良好,則可能是連接超時問題:您的sql花費的時間超過了Java連接中設置的時間。
為了確定,您必須在“ catch / finally”塊中打印異常的堆棧跟蹤。 它會向您顯示問題所在。 一個簡單的谷歌搜索與問題的原因應該告訴你如何解決。
結果集有多大? MySQL JDBC連接器在返回之前會緩沖所有行,因此您可能會看到這種滯后。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.