2011-10-31 52 views

回答

11

原因碼68已經告訴你這是由於鎖定超時(死鎖是原因碼2)這可能是由於在使用將要訪問相同的數據在同一時間運行的查詢其他用戶,或者您自己的多個更新。

首先從db2命令行運行db2pd -db locktest -locks show detail以查看鎖的位置。然後你需要運行類似:

select tabschema, tabname, tableid, tbspaceid 
from syscat.tables where tbspaceid = # and tableid = # 

填充與您從db2pd命令的輸出獲取ID號碼#符號。

一旦你看到那裏的鎖都,這裏有一些提示:

有時可以通過確保所有應用程序訪問自己常用的數據按相同的順序減少

◦Deadlock頻率 - 這意味着,例如,他們訪問(並因此鎖定)表A中的行,接着是表B,接着是表C,依此類推。 http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.admin.trb.doc/doc/t0055074.html

推薦閱讀:http://www.ibm.com/developerworks/data/library/techarticle/dm-0511bond/index.html

附錄:

取自如果你的servlet或其他有罪應用程序是使用被發現參與死鎖select語句,你可以試着在後面加上with ur的select語句如果新更新(或插入)數據的準確性不重要。

+0

重要的是要指出,文章談論**減少死鎖的頻率,而不是**完全阻止**。根據http://stackoverflow.com/a/112256/14731一致的鎖定順序不會防止死鎖。我們能做的最多的是試圖減少他們的頻率。 – Gili