我创建多个连接并同时批量插入myTable(多线程)
insertString = "INSERT INTO ... + values + ") ";
insertTable.addBatch(insertString);
insertTable.executeBatch();
insertTable.clearBatch();
有时它工作正常,但在其他情况下它会挂起。我理解这是因为我插入到同一个表中,因此它被锁定。
如何编写INSERT
语句,使其无法锁定表格?
是否有任何特殊的transaction start . .
命令可以防止表被锁定?另外,我很好奇为什么它有时候工作得很好?
PS:我使用的最大连接数是1024(有时是完美的)
由于
答案 0 :(得分:1)
1024会话完全是疯了。您的DBA应该阻止您的用户。
当您使用相同的PI加载多行时,可能会遇到阻止的会话。
单行INSERT是加载数据的最慢方式。批量大小为1000的单个会话将胜过几十个单行会话(但之后只使用一个会话)。
如果目标表为空,则切换到JDBC FastLoad。
检查 http://developer.teradata.com/connectivity/articles/speed-up-your-jdbcodbc-applications
这是一个临时表吗?