MySQL 死锁怎么产生?怎么解决?
死锁:两个事务互相持有对方需要的锁且等待。示例:T1 锁行 A 等行 B,T2 锁行 B 等行 A。InnoDB 处理:死锁检测(等待图)自动回滚代价较小的事务(ERROR 1213 Deadlock found),不需人工干预;也支持 innodb_lock_wait_timeout 超时。预防:① 加锁顺序一致(按固定顺序访问多行,如先小 id 后大 id);② 一次尽量锁少行(缩小事务范围);③ 事务尽量短(少持锁);④ 避免大事务跨表交叉加锁;⑤ 索引设计让锁落在更少记录;⑥ 业务重试(捕获死锁异常重试一次)。
一起交流
分享经验,让问题更进一步
讨论,从你的观点开始
还没有回复,欢迎补充经验或分享不同的思路。