不知道怎么能准确搜索到过去的文章,就直接问一下:
现在我有三个表,A=40000条,B=300000条, C=250000条 数据,现在 A 有两个子表 B和 C,我们批量转换数据(不光是直接导入,有好多计算在里面),现在为了加快速度,用多速度,开多个事务处理,A表最复杂,试了多线程会导致数据搞错,不过,A 表使用单线程也没关系,主要是 C 表最快,现在这种问题,处理 B / C 表时都只是把属于同一个 A 记录来一个事务处理,因此我想,我可以允许事务间不隔离开就能跑。因为每个事务不会更新或访问相同的记录,之前没有设置事务隔离的话,每个事务都在等前一个事务提交,是不是因为整个表C 被锁住。请问如何做到不锁整个表?
现在我有三个表,A=40000条,B=300000条, C=250000条 数据,现在 A 有两个子表 B和 C,我们批量转换数据(不光是直接导入,有好多计算在里面),现在为了加快速度,用多速度,开多个事务处理,A表最复杂,试了多线程会导致数据搞错,不过,A 表使用单线程也没关系,主要是 C 表最快,现在这种问题,处理 B / C 表时都只是把属于同一个 A 记录来一个事务处理,因此我想,我可以允许事务间不隔离开就能跑。因为每个事务不会更新或访问相同的记录,之前没有设置事务隔离的话,每个事务都在等前一个事务提交,是不是因为整个表C 被锁住。请问如何做到不锁整个表?
在表级加的是共享锁
只要你不更改表结构就行
是的,试着把你锁整个表的for update去掉。
现在多个线程各开一个连接一个事务同时处理数据时,我觉得似乎它们等待,不知道哪个环节在等。Q1: 我之前以前是锁住整个表了,请问怎么看这些 SQL 是否在等锁花了时间?
Q2: 可以通过把事务隔离级别降到最后吗来提高速度吗,下面四个级别最第一个最低吗?Connection.TRANSACTION_READ_UNCOMMITTED
Connection.TRANSACTION_READ_COMMITTED
Connection.TRANSACTION_REPEATABLE_READ
Connection.TRANSACTION_SERIALIZABLE