mysql安全补丁如何处理_MySQL中如何避免死锁——如何最小化和处理死锁

首先预告一下未来几周要发布的文章:

MySQL索引,如何优化SQL,事务相关的文章,Redis系列文章也会相继推出。喜欢的读者可以点击关注。

死锁是一个经典的问题在事务型数据库中,因为msyql会自动的使用行级别的锁,所以你会在执行update或者delete时候mysql会自动的锁住索引记录单行或者多行,这时可能会出现死锁现象。

您可以使用以下技术来处理死锁并减少发生死锁的可能性:

1. 经常使用SHOW ENGINE INNODB STATUS命令查看mysql最近死锁情况,这可以帮助您调整应用程序以避免死锁。

2. 如果频繁出现死锁情况应该引起重视,打开innodb_print_all_deadlocks 设置后每一个死锁会保存到mysql的error log中,分析解决死锁情况。并关闭innodb_print_all_deadlocks 设置。

3. 应用程序中应该有死锁发生后导致的事务回滚的重试代码。

4. 保持事务小巧且持续时间短,以便事务不易发生冲突。

5. 如果使用锁定读取(SELECT ... FOR UPDATE或SELECT ... LOCK IN SHARE MODE),请尝试使用较低的隔离级别,例如READ COMMITTED。

6. 修改事务中的多个表或同一表中的不同行时,每次都要以一致的顺序执行这些操作,例如:将数据库操作组织到应用程序内的函数中,或调用存储过程(这种方法不推荐使用),而不是在不同位置编码多个类似的INSERT,UPDATE和DELETE语句。

7. 创建合适的索引,以保证查询需要扫描较少的索引记录,因此设置较少的锁。使用EXPLAIN SELECT优化你的sql。

8. 使用更少的锁定。如果您可以允许SELECT从旧快照返回数据,请不要在其中添加FOR UPDATE或LOCK IN SHARE MODE子句, 这种情况下推荐使用READ COMMITTED隔离级别,因为同一事务中的每个一致读取均从其自己的新快照读取。

f23ab2a290b7a1deedf7ef6703791073.png

以上仅为个人见解,如果有错误欢迎指出,喜欢的话可以点赞收藏评论转发,后续会继续推出MySQL系列文章。

转载请注明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值