Linux 上 Informix 并发控制的实现要点
在 Linux 环境中,Informix 通过多版本并发控制与锁机制协同工作:以 MVCC 提供读不阻塞写的基础能力,以 锁粒度(数据库/表/页/记录/键) 与 隔离级别 控制读写冲突与一致性,并配合 死锁检测 与 锁等待策略 保障高并发下的稳定性与吞吐。
核心机制一览
| 机制 | 作用 | 关键要点 |
|---|---|---|
| MVCC 与锁并存 | 读操作尽量不加阻塞锁,写操作精准加锁 | 读不阻塞写、写不阻塞读(取决于隔离级别与语句) |
| 锁类型 | 控制并发访问的互斥与升级 | 共享锁 S、更新/可提升锁 U(PROMOTABLE)、排他锁 X |
| 锁粒度 | 降低争用范围 | 数据库级、表级、页级、记录级、键级 |
| 隔离级别 | 决定读视图与锁强度 | Dirty Read、Committed Read、Cursor Stability、Repeatable Read |
| 等待与死锁 | 处理冲突与循环等待 | SET LOCK MODE TO WAIT/NOT WAIT/WAIT n;超时或检测到死锁报错回滚 |
| 日志与一致性 | 保障可回滚与恢复 | 依赖 逻辑日志/物理日志 实现回滚、重做与一致性读 |
隔离级别与锁行为
SET ISOLATION TO <level>;(含 Cursor Stability)SET TRANSACTION ISOLATION LEVEL <level>;(事务内通常仅能设置一次)锁类型、粒度与典型场景
DATABASE ... EXCLUSIVE 常用于维护窗口;打开数据库默认加 S。LOCK TABLE ... IN SHARE/EXCLUSIVE MODE;DDL(如 ALTER TABLE/CREATE INDEX)常自动加表级锁。UPDATE/DELETE 时提升为 X。SET LOCK MODE TO WAIT; 无限等待;TO NOT WAIT; 立即报错;TO WAIT n; 等待 n 秒后报错。监控与调优建议
onstat -k 查看当前锁与等待链;结合 onstat -g ses/onstat -g act 定位会话与线索;onstat -g glo 观察虚拟处理器负载。SET LOCK MODE TO WAIT n; 并设计指数退避重试;应用需正确处理锁冲突与死锁错误码。