如何避免死锁检测
- 如果确保我们的业务需求不会造成死锁检测,我们可以把死锁检测暂时关闭,但这存在一定的风险(存在死锁检测的时候如果出现死锁,根据undolog会可以回滚使数据恢复正常,但是如果把死锁检测关闭,当真正出现死锁的时候,就会一直等待到超时时间)
- 控制并发度:比如控制某一行同时最多有10个线程在更新,那么死锁检测的成本就很低,大大减少了死锁检测所带来的性能损失。但是在客户端控制并发访问不行,因为假设你控制一个客户端最多只有5个并发访问线程,但如果客户端的数量达到600个,那就会有3000个并发访问数量,还是会导致死锁检测所带来的性能损失。所以我们应该在数据库服务端控制,可以使用中间件或者修改mysql源码,通过排队来控制并发访问量