我在apachespark和scala上有一个etl,在某个阶段,程序使用jdbc方法将Dataframe写入mysql中的表中。
在以前的尝试中,我没有设置 rewriteBatchedStatements=true
在连接字符串中,这使得insert查询非常慢(对于200万条记录大约需要4.5个小时)。在搜索了一点之后,我发现了batched statements选项,正如我在本段开头所说的,并设置了值 batchSize=30
.
然而,这个程序在那个阶段崩溃了,给了我们一个机会
java.sql.BatchUpdateException: Lock wait timeout exceeded; try restarting transaction
错误。
我看到有人建议改变 tx_location
在我的db上,从repeatable read到read committed并增加锁超时,但考虑到这意味着要么大量增加batchsize,要么将线程锁定一段难以置信的长时间。
有什么解决方案吗?或者我应该继续使用当前的“no batch statements”配置吗?
暂无答案!
目前还没有任何答案,快来回答吧!