0
創建多個連接,並同時進行批量插入到mytable的(多線程)Teradata的多個連接INSERT僵局
insertString = "INSERT INTO ... + values + ") ";
insertTable.addBatch(insertString);
insertTable.executeBatch();
insertTable.clearBatch();
有時它工作得很好,但是在它掛起其他案件。我明白這是因爲我插入到同一個表中,所以它被鎖定。
我該如何編寫INSERT
語句使其不鎖定表?
是否有可以防止表被鎖定任何特殊transaction start . .
命令?另外,我很好奇它爲什麼有時可以正常工作?
PS:我用的最大連接數爲1024(完美的工作有時)
感謝
謝謝。我無法切換到Fastload,因爲它很糟糕。它需要超級乾淨的數據和許多其他限制。其實我正在使用'batch'。每個連接上傳一個800行的「批」,因此總共可以同時提交1024 * 800行。它曾經工作!我用特殊的方式編寫了我的代碼,這樣即使某個連接被阻塞,所有其他連接仍然會運行。被阻止的會話不是問題。我的問題是鎖定表 – Buras 2014-10-09 21:14:32
我用那篇文章寫我的代碼,謝謝 – Buras 2014-10-09 21:16:54
阻塞的會話是一個問題。當你使用'batch'運行多個會話時,如果有多個具有相同RowHash的行,將會很容易以死鎖結束。在使用多個會話時,無法鎖定表格(除非您想在CLI中使用FastLoad/MLoad協議編寫自己的加載工具)。你有沒有檢查登錄1024會話需要多長時間?如果這是臨時表,則可以切換到NO PRIMARY INDEX表以獲得更快的負載,但每個節點從不使用超過1到2個會話。爲什麼JDBC FastLoad需要比您的方法更清潔的數據? – dnoeth 2014-10-09 21:25:50