检测手段
检测手段
-- MySQL:查看最近一次死锁
SHOW ENGINE INNODB STATUS\G
-- PostgreSQL:日志中记录 deadlock detected(错误码 40P01)| MySQL | 自动检测立即回滚代价较小的事务,报错 ER_LOCK_DEADLOCK (1213) |
|---|---|
| PostgreSQL | 等待 deadlock_timeout(默认 1s)后检测,报 40P01 |
| 预防 | 统一加锁顺序、缩短事务、让加锁谓词走索引减少锁定范围 |
两个事务互相持有对方需要的锁形成环路:InnoDB 与 PostgreSQL 都会自动检测并回滚其中一个事务,应用侧必须能重试。
-- MySQL:查看最近一次死锁
SHOW ENGINE INNODB STATUS\G
-- PostgreSQL:日志中记录 deadlock detected(错误码 40P01)| MySQL | 自动检测立即回滚代价较小的事务,报错 ER_LOCK_DEADLOCK (1213) |
|---|---|
| PostgreSQL | 等待 deadlock_timeout(默认 1s)后检测,报 40P01 |
| 预防 | 统一加锁顺序、缩短事务、让加锁谓词走索引减少锁定范围 |