2013-07-09 72 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。 关于行大小限制的例外 - 我想你应该调查拆分表格或更改表结构的可能性...