用途:处理 MariaDB 中 ER_LOCK_DEADLOCK(1213,SQLSTATE 40001)与 ER_LOCK_WAIT_TIMEOUT_EXCEEDED(1205)两类锁相关错误,并预防死锁。
主要能力:区分两类错误——1213 表示死锁环已解除、服务器已回滚,应重试整个事务;1205 表示其他事务仍持有行锁,需先定位并处理阻塞者,而非盲目重试。提供决策树、锁类型心智模型(S/X/IS/IX、记录锁、间隙锁、next-key 锁、插入意向锁、AUTO-INC 锁)、系统变量说明(innodb_deadlock_detect 默认 ON、innodb_lock_wait_timeout 默认 50 秒、innodb_print_all_deadlocks 默认 OFF、隔离级别)。
必要用法:用 SHOW ENGINE INNODB STATUS\G 查看最近一次死锁块;生产环境建议 SET GLOBAL innodb_print_all_deadlocks = ON; 记录全部死锁。查询阻塞事务:SELECT * FROM information_schema.INNODB_TRX ORDER BY trx_started ASC LIMIT 5; 应用层对 1213 采用指数退避重试整个事务,重试预算 3-5 次。Galera 集群 COMMIT 时返回 1213 属正常认证冲突,应同样重试,可用 SHOW STATUS LIKE 'wsrep_local_cert_failures'; 观察。
适用场景:并发事务设计、锁顺序规范、热点行争用改造、隔离级别调整(READ COMMITTED 禁用间隙锁但引入幻读)。
限制:不涵盖通用 InnoDB 调优、Galera 集群搭建、非 Galera 复制冲突及乐观并发模式;具体价格、平台等信息暂未提供。