操作系统:Solaris
数据库:Informix
我有一个包含2个主题的进程:
线程1处理新事务并执行DB INSERTS
线程2处理现有事务并执行DB DELETES
问题
线程1在表格上持续进行INSERTS(添加新交易) 线程2持续根据主键
从同一个表中执行DELETES(删除过期的事务) 由于页面/表锁定导致Informix错误244
,因此INSERTS失败。
我猜,DELETE正在执行表锁而不是行锁并阻止INSERT工作。
有什么办法可以防止这种僵局吗?
编辑
我找到了另一条线索。 244
错误是由SELECT
查询引起的
在执行操作之前,insert
和delete
操作都会从频繁更新的表中执行select
。
隔离设置为COMMITTED READ
。当我从dbaccess手动对此表执行select
时,当删除发生时,我得到相同的错误。
答案 0 :(得分:1)
如果DELETE在按主键删除单个元素时执行全表锁定,我会感到非常惊讶。相反,由于修改行的数量,一个(或两个)事务本身的寿命最终可能最终使表锁失效。通常,通过消除每个事务中除了单行操作之外的所有操作,并确保事务模型是读取提交的,可以避免易失性表中的死锁。至少这是我的经历。