Ubuntu 上 Informix 的并发控制策略
并发控制总览 在 Ubuntu 环境中,Informix 通过多版本并发控制(MVCC)、多粒度锁、事务隔离级别与死锁处理协同工作,在保证一致性的同时提升吞吐。核心机制包括:基于 共享锁(S)/排他锁(X)/可提升锁(U,Promotable) 的多粒度锁(支持行、页、表级,必要时发生锁升级)、意向锁 协调不同粒度的锁请求、死锁自动检测与回滚、以及 MVCC 提升读并发。系统提供 线程池/工作线程 来并行处理连接与查询,减少上下文切换开销。
事务隔离级别与读一致性 Informix 提供多种隔离级别以在一致性与并发度之间取舍,常用设置如下(会话级生效):
| 隔离级别 | 读一致性 | 可能现象 | 典型场景 |
|---|---|---|---|
| Dirty Read | 最低 | 可能脏读、不可重复读、幻读 | 静态只读表、极致吞吐 |
| Committed Read | 避免脏读 | 不可重复读、幻读 | OLTP 默认读,读多写少 |
| Cursor Stability | 游标行稳定 | 当前行加 S 锁至下一 FETCH | 遍历更新、避免读到被改写行 |
| Repeatable Read | 事务内可重复读 | 可能幻读 | 报表/对账需强一致 |
| Serializable | 最高 | 并发度最低 | 严格串行语义 |
设置示例:
锁机制与锁粒度
并发控制策略与配置建议
典型场景与 SQL 示例
BEGIN WORK;
SELECT balance INTO v_src FROM accounts WHERE id = 123 FOR UPDATE;
SELECT balance INTO v_dst FROM accounts WHERE id = 456 FOR UPDATE;
UPDATE accounts SET balance = balance - 100 WHERE id = 123;
UPDATE accounts SET balance = balance + 100 WHERE id = 456;
COMMIT WORK;
SET ISOLATION TO COMMITTED READ;
SELECT id, amount FROM orders WHERE status = 'OPEN';
SET ISOLATION TO REPEATABLE READ;
SELECT id FROM orders WHERE order_date < '2025-01-01' FOR UPDATE;
上述示例分别通过 FOR UPDATE 提前加锁、Committed Read 降低读阻塞、以及 Repeatable Read 保证范围读一致性。