关于多线程事务锁等待问题思考
问题了解
在mysql事务中,默认采用的是RR隔离机制,具体什么效果不多讲。
在面对RR事务下,进行删除(逐条)后插入,分析如下:
1、逐条删除,事务会开启记录锁,记录间的间隙锁,再开启新的线程事务中进行插入的时候,就会等待。效果如下:



2、问题解决就是插入的数据不要在删除的数据范围内,这样就不会被其间隙锁而锁等待。
问题处理


在开启新的线程事务中插入时。之前的插入数据的id是通过uuid创建,uuid是无序的,很有可能触发间隙锁。而将其换成Snowflake创建的id,插入的数据是有序的,不会触发间隙锁。
启示
id最好为有序的id,自然最好用mysql自带的自增长id
本文探讨了在MySQL事务中,如何通过使用有序的Snowflake ID而非无序的UUID来避免因间隙锁引起的插入等待。作者强调了有序ID在减少事务冲突中的优势,并推荐使用MySQL自增ID作为最佳实践。
786

被折叠的 条评论
为什么被折叠?



