【发布时间】:2012-09-24 07:41:34
【问题描述】:
操作系统:Solaris
数据库:Informix
我有一个有 2 个线程的进程:
线程 1 处理新事务并执行 DB INSERTS
线程 2 处理现有事务并执行 DB DELETES
问题
线程 1 不断在表上执行 INSERTS(添加新事务)。
线程 2 不断地根据主键从同一个表中执行 DELETES(删除过期事务)
由于页/表锁定而发生的 Informix 错误 244,INSERTS 失败。
我猜,DELETE 正在执行表锁而不是行锁并阻止插入工作。
有什么办法可以防止这种死锁吗?
编辑
我发现了另一个线索。 244 错误是由 SELECT 查询引起的。
在执行操作之前,insert 和 delete 操作都会从频繁更新的表中执行 select。
隔离设置为COMMITTED READ。当我从 dbaccess 手动对这个表执行 select 时,当删除发生时,我得到了同样的错误。
【问题讨论】:
-
哪个版本的 Informix?表上是否有页锁定或行锁定? DELETE语句的形式是什么?
标签: c++ sql multithreading deadlock informix