数据库死锁和破解方法

死锁产生原因

事务A开启事务后,更新t_student表ID为10的数据,没有提交也没有回滚。

事务B开启事务也更新t_student表ID为10的数据,这个时候因为t_student表ID为10的数据被事务A锁住了,这个锁没有释放。故产生死锁。

 

解决方法

1. 事务中操作的时间

2. 事务及时提交或回滚

此外,不要轻易对线上数据库进行 DDL 操作,尤其是使用量大且频繁的数据表,强行修改可能会引发灾难性后果,目前修改线上表结构主要有以下几种方式:

  1. 等到使用量小的时候(例如半夜)修改,但有一定风险。
  2. 暂时停止服务,修改完毕再上线,但会影响用户体验。
  3. 复制旧表结构到新表,旧表创建触发器,旧表操作同步执行到新表,然后对新表修改表结构,同步旧数据到新表,锁旧表(只读),最后新表替换旧表,此方案基本对用户体验无影响,但操作较为复杂。
  4. 新建扩展表,但如果字段使用频繁会影响性能。

在实际生产中,我们需要根据具体场景去选择适合自己的表结构变更方式。

posted on 2023-03-22 11:00  周公  阅读(110)  评论(0编辑  收藏  举报

导航