在 Linux 上运行的 Informix 数据库 中,“锁(Lock)” 是数据库用来保证数据一致性和并发控制的机制。下面从概念、类型、粒度、常见问题和排查几个方面说明。
Informix 锁是 数据库在事务过程中对数据对象加的限制,用于:
在 Linux 环境中,Informix 锁的行为与 Windows 上基本一致,只是运行在 Linux 进程/线程模型中。
| 锁类型 | 说明 |
|---|---|
| Shared Lock(S锁) | 共享锁,允许多个事务读,不允许写 |
| Exclusive Lock(X锁) | 排他锁,只允许一个事务读写 |
| Update Lock(U锁) | 更新锁,用于防止死锁,常见于读后写 |
| Intent Lock(意向锁) | 表级锁,表示将在页/行上加锁 |
Informix 支持多种锁粒度:
一般 OLTP 系统推荐使用 行级锁,减少锁冲突。
Informix 常见隔离级别:
隔离级别越高,锁越多、越久。
LOCKMODE WAIT 时间会报错错误示例:
-244: Could not do a physical order read to fetch next row.
-107: ISAM error: record is locked.
两个事务互相等待对方释放锁。
错误示例:
-143: Deadlock detected
查看当前锁信息:
onstat -k
显示:
查看用户会话与锁持有:
onstat -u
查看具体会话 SQL:
onstat -g ses <session_id>
杀掉问题会话:
onmode -z <session_id>
SET LOCK MODE TO WAIT 5;
Linux 上的 Informix 锁,是数据库在多用户并发访问时,用来保护数据一致性的“控制权标记”,理解锁类型、粒度和等待机制,是排查性能与阻塞问题的关键。
如果你愿意,我可以:
帮你做针对性分析。