关于多线程事务锁等待问题思考
问题了解
在mysql事务中,默认采用的是RR隔离机制,具体什么效果不多讲。
在面对RR事务下,进行删除(逐条)后插入,分析如下:
1、逐条删除,事务会开启记录锁,记录间的间隙锁,再开启新的线程事务中进行插入的时候,就会等待。效果如下:
2、问题解决就是插入的数据不要在删除的数据范围内,这样就不会被其间隙锁而锁等待。
问题处理
在开启新的线程事务中插入时。之前的插入数据的id是通过uuid创建,uuid是无序的,很有可能触发间隙锁。而将其换成Snowflake创建的id,插入的数据是有序的,不会触发间隙锁。
启示
id最好为有序的id,自然最好用mysql自带的自增长id