2013-07-09 71 views
2

我正在使用ASE 15.0.3,並且遇到java進程問題,並且每次都嘗試在表中執行批量插入(通過sql查詢而非存儲過程)時拋出異常。以下是例外: JZ0BE: BatchUpdateException: Error occurred while executing batch statement: Your server command (family id #0, process id #61) encountered a deadlock situation. Please re-run your command.Sybase批量插入死鎖

在它試圖插入表中有很多列,但只有一個(非集羣)上的ID(身份INT)列索引。

其他(兼),與該表進行交互可以執行兩件事情一個過程:

1) Select data from the table (transaction based) 

2) Delete data from the table (transaction based, and first requiring an 
exclusive table lock with wait 20 sec). 

的預感是,僵局來自於索引頁。由於表中包含許多大的變量字符列,所以加起來多於8191字節,並且它顯示:...無法將鎖定機制轉換爲數據頁或數據行。... exceeds limit of 8191 bytes for column-offset of variable-length columns in DOL tables. Future inserts to this table may fail.

有關如何避免這種情況的任何想法? (除了從表中刪除索引)。

謝謝

+1

你可以打開僵局記錄到錯誤日誌,並找出到底是什麼陷入僵局。 MDA表可以做同樣的事情,但我知道可以從錯誤日誌中找到有用的信息。 它會被選爲另一面嗎?因爲獨佔表鎖不應該參與僵局。 但是,如果是這樣,我可以看到DOL是可取的,但你卡在那裏。 你能捕獲錯誤並重新提交嗎?這聽起來像你已經決定反對。 –

+0

當我第一次檢查日誌...沒有什麼,所以日誌記錄必須已關閉。從那以後,僵局沒有發生,我會在下次發生日誌時看看。它似乎很少,但它會導致很多不適。 – andreih

+0

是否很難添加錯誤消息和自動重新簽名的檢查? –

回答

0

起初 - 你有觸發器在桌子上嗎?如果是 - 檢查觸發器上的所有表格。 您對此表使用哪種鎖定模式?如果它是一個allpages鎖 - 嘗試將其更改爲datapage/datarow。 關於行大小限制的例外 - 我想你應該調查拆分表格或更改表結構的可能性...