最近做一個sqlserver資料庫遷移到oracle資料庫。
在oracle里面建好了表空間、表這些。用C#寫了一個批量匯入的工具。
開始,采用查詢SQLserver里面表資料然后拼接SQL的這樣執行,后面遇到clob這些型別的欄位里面存了圖片這些字串非常長,生成一條SQL有幾百kb的,由于oracle 的限制無法執行,就沒有采用這樣的方式了。
后面采用了OracleParameter這樣的方式來,由于需要批量匯入,加上是oracle10g就只能用odpnet,這個就遇到了一個問題,匯入一個表里面有幾十萬條資料,只用了幾十秒鐘,但是有幾個表只有一兩萬資料,里面就幾個欄位,建了一個主鍵,匯入非常慢一次批量匯入只能500條要用接近3分鐘,這樣表全部匯入過去需要一個多小時,如果批量1000那么表就會被鎖。
請問有人知道這個咋個解決嗎?
uj5u.com熱心網友回復:
不懂開發,開發部分掠過不提
資料庫部分:
1、主鍵是需要有個唯一索引來保證資料的唯一性的,所以,有索引的插入自然是會比沒索引的要慢的,索引越多,性能下降會越明顯。
2、不知道批量提交1000潭訓鎖表是什么意思?多執行緒插入?通常的DML操作,包含insert都會鎖表的,但是這時候在表上加的鎖是等級不太高的3#佇列鎖,3#鎖之間是兼容的,也就是說,某張表可以允許多個會話同時操作表里的資料,只要不設計多個會話操作同一行資料,就不會出現鎖等待,我想應該調查下插入1000條記錄時候,你的會話在經歷什么等待,可以獲取SID之后,查詢v$session.event欄位得到,以作進一步的調查只用。
uj5u.com熱心網友回復:
1、這張表是否存在觸發器,如果有檢查一下邏輯。2、這張表的外鍵約束,主要是它參考其他表的外鍵。
3、刪掉它,重新創建(注意備份現有的資料)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/82478.html
標籤:開發
