1. MySQL 中 innodb_lock_wait_timeout 的应用?
MySQL 中 innodb_lock_wait_timeout 的作用是什么?它如何应用于锁等待处理?
- innodb_lock_wait_timeout 的作用
- 锁等待超时
- 超时后的行为
innodb_lock_wait_timeout 用于控制 InnoDB 事务等待行锁的超时时间(默认 50 秒)。当一个事务等待其他事务持有的行锁并超过该时间时,会抛出"Lock wait timeout exceeded"错误,回滚当前等待的语句(但不会回滚整个事务)。它的作用是避免事务无限期等待锁而导致系统卡死,让锁等待有一个明确的上限。实际调优中,若并发锁冲突频繁,可适当调小该值使冲突快速暴露,或调大以满足耐心等待的场景。它与死锁检测(deadlock detection)是两种不同的机制,前者是超时,后者是主动检测并回滚。
innodb_lock_wait_timeout 是锁等待的"安全阀",防止无期限等待。理解它与死锁检测、整个事务回滚(需 innodb_rollback_on_timeout)的区别,是配置数据库锁行为的关键。