我正在使用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 identity)列上只有一个(非聚集的)索引。
与此表交互的其他(并发)进程可以执行以下两项操作之一:
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.
有关如何避免这种情况的任何想法? (除了从表中删除索引)。
由于
答案 0 :(得分:0)
起初 - 你桌上有触发器吗?如果是 - 检查触发器上的所有表。 您对此表使用哪种锁模式?如果它是一个allpages锁 - 尝试将其更改为datapage / datarow。 关于行大小限制的例外 - 我认为您应该调查拆分表或更改表结构的可能性......