我试图使用多个线程同时更新不同的行,但是MySql似乎锁定了表中的所有行,而不是只锁定那些由“where”子句匹配的行。因此,更新不是并发的,有时会导致锁定超时错误。p.starmap(process_calculate_training, thread_func_args)发现Django自动将隔离级别设置为因此,MySql只锁定那些需要更新的行。但是,更新不会同时进行,因为两个线程似乎在等待锁,即使它们必须更新不同的行。
我在并发更新操作期间执行了show engine i
因此,假设我使用可序列化隔离级别启动了一个事务,那么Oracle默认情况下会在该事务中列出的所有表上获取某种类型的"Table“锁,如果是,那么它是什么?我无法找到这个问题的直接答案,但我从许多在线文档中了解到,隔离级别与锁之间没有直接关系。将根据事务中存在的特定SQL语句获取锁,而不是基于事务隔离级别是否已被读取、提交或可序列化,因此,如果存在DML,则将获取只读表锁(RX),如果有类似于LOCK TABLE table IN EXCLUS