簡體   English   中英

sybase和jdbc。 無法提交jdbc事務。 讀超時

[英]sybase and jdbc. Could not commit jdbc transaction. Read time out

在我的應用嘗試在幾分鍾后提交許多事務后,出現以下異常:

無法提交jdbc事務嵌套的異常是java.sql.sqlexception:jz006:捕獲的ioexception:java.net.SocketTimeoutException:讀取超時...”

我將Sybase和JDBC 4驅動程序與Spring JDBC一起使用,並且找到了以下鏈接: http : //infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc39001.0707/html /prjdbc0707/prjdbc070714.htm我可以使用以下任何一種方法:

會話超時
DEFAULT_QUERY_ TIMEOUT
INTERNAL_QUERY_TIMEOUT

一種想法是批量進行事務處理,但是我沒有時間進行開發。 有什么選擇可以避免發生該錯誤?

檢查您的進程在執行時是否相互阻塞(如果不確定如何檢查,請詢問您的DBA)。 根據連接屬性(特別是將自動提交設置為關閉),在嘗試進行下一個事務之前,您可能實際上未完全提交每個事務;如果您正在使用具有多個線程的連接池,則它們可能會相互阻塞。 與您的DBA交談並檢查表的鎖定方案,例如,如果表的鎖定方案設置為allpages鎖定,您將在頁面而不是行級數據上保持鎖定。 您也可以自己通過sp_help進行檢查。 有關各種類型的鎖定方案的更多信息,請參見http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.dc20021_1251/html/locking/X25549.htm (舊版本,在當前版本上仍然有效)。

您可以通過sp_who,sp_lock或直接針對系統表檢查鎖定(選擇spid,從master..sysprocesses進行阻止,其中blocked!= 0是獲取過程和阻止過程的非常簡單的方法,您可以向其添加更多列需要)。

您還應該要求DBA檢查事務是否是最佳的,例如,對更新進行表掃描很可能將整個表鎖定在其他事務上,並會導致您在此處看到超時問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM