我创建多个连接并同时批量插入到 myTable 中(多线程)
insertString = "INSERT INTO ... + values + ") ";
insertTable.addBatch(insertString);
insertTable.executeBatch();
insertTable.clearBatch();
有时它工作正常,但在其他情况下它会挂起。我明白这是因为我正在插入同一个表,所以它被锁定。
如何编写 INSERT
语句使其不锁定表?
是否有任何特殊的交易开始。 。
命令可以防止表被锁定?另外,我很好奇为什么有时它可以正常工作?
PS:我使用的最大连接数是 1024(有时工作正常)
谢谢
最佳答案
1024 session 完全是疯了。您的 DBA 应该为此阻止您的用户。
当您加载具有相同 PI 的多行时,您可能会遇到阻塞 session 。
单行插入是加载数据最慢的方式。批量大小为几千个的单个 session 将优于数十个单行 session (但仅使用一个 session )。
或者如果目标表为空,则切换到 JDBC FastLoad。
检查 http://developer.teradata.com/connectivity/articles/speed-up-your-jdbcodbc-applications
这是临时表吗?
关于java - Teradata 多个连接 INSERT 死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26287093/