2

我正在使用 ASE 15.0.3 并且在尝试在表中执行批量插入(通过 sql 查询而不是存储过程)时时不时地抛出异常的 java 进程存在问题。以下是例外: 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.

它尝试插入的表有很多列,但在 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.

关于如何避免这种情况的任何想法?(除了从表中删除索引)。

谢谢

4

1 回答 1

0

起初 - 你桌上有触发器吗?如果是 - 检查触发器处的所有表。您对此表使用哪种锁定模式?如果它是所有页锁定 - 尝试将其更改为数据页/数据行。关于行大小限制的例外-我认为您应该调查拆分表或更改表结构的可能性...

于 2014-11-28T07:59:39.803 回答