Sybase Batch插入死锁

时间:2013-07-09 09:59:25

标签: database exception deadlock sybase sybase-ase

我正在使用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.

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

由于

1 个答案:

答案 0 :(得分:0)

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