缩表的情形
- 大事务操作:如果一个事务涉及到大量的数据修改、插入或删除,会占用表级锁,影响其他事务的并发操作。
- 长事务:长时间执行的事务会持有锁资源,导致其他事务等待,增加锁表风险。
- 无索引或不当索引:没有或者使用不合适的索引会导致查询效率低下,需要锁住更多的行或表。
- 死锁:两个或多个事务相互等待对方释放资源,形成死锁,导致涉及的表被锁住。
- 高并发:在高并发环境下,大量的事务同时竞争资源,可能导致某些事务无法获取所需的锁,从而影响正常的操作。
- 不同的锁级别:如果不同事务使用了不同的锁级别,比如某个事务使用了表级锁而另一个事务使用了行级锁,可能导致锁竞争和表级锁的出现
如何解决
- 优化sql语句
- 分库分表
- 使用行级锁,for update\for share
- 避免长事务
- 加入缓存
- 定时清理数据,释放锁资源