2010-05-10 155 views
0

有沒有什麼方法可以提高SQL服務器插入的性能,正如你可以在下面看到的,我已經在sql 2005,2008和oracle下面使用了。我正在將數據從ORACLE移動到SQL。SQL Server 2008插入性能問題

雖然插入數據到SQL我正在使用一個過程。

插入到Oracles與SQL相比非常快,有沒有什麼辦法提高性能。或更好的方式將數據從Oracle移動到SQL(數據大小約100000小時記錄)

請查看下面的統計數據,因爲我收集了RUN1和RUN2時間以毫秒爲單位。

http://tinypic.com/view.php?pic=23v19px&s=5 http://i39.tinypic.com/23v19px.jpg

+1

請顯示錶結構和代碼;)要移動數據,您應該只爲每個表執行一條語句 - 從鏈接的oracle表中插入。或者導出,在sql端使用批量加載。 – TomTom 2010-05-10 10:10:25

回答

1

可能是你可以使用Bulk Copy到數據RAM到數據庫中。

儘管性能取決於許多因素,包括但不限於磁盤性能,CPU,觸發器,索引等。您需要剖析插入程序正在執行的操作,以瞭解如何改進它。

SQL Server具有一個可幫助您的分析器實用程序。一旦你發現一個瓶頸問在這裏如何幫助。否則你的問題是非常一般的。

0

確保您在單個事務中執行批量插入,而不是在各自的事務中進行單次插入。

如果您發佈了您編寫的實際存儲過程,那麼評論起來會更容易一些,但如果不瞭解代碼和數據的其他信息,這些數字看起來會非常緩慢。

您可能還想看看sql server中的實際批量插入方法,如「批量插入」命令或sql server集成服務。

+0

是的,批量插入一個事務內是一個好主意 – 2010-05-12 19:36:04

0

很難說沒有更多的細節,但你是否通過程序一次插入一行?如果是這樣,交易,鎖定,連接設置+拆卸等的開銷可以爲每個人提供一定數量的固定利率罰款INSERT。如果可能的話,批量插入一次插入多行。

例如,如果你最終做類似的信息(每行是一個執行):

INSERT INTO Animals (ID, Name) VALUES (1, 'Dog') 
INSERT INTO Animals (ID, Name) VALUES (2, 'Cat') 
INSERT INTO Animals (ID, Name) VALUES (3, 'Monkey') 
... 
INSERT INTO Animals (ID, Name) VALUES (9999, 'Lemur') 

您的常通過執行一個批處理提高性能,使用技術,像(說):

INSERT INTO Animals (ID, Name) 
SELECT 1 AS ID, 'Dog' AS Name 
UNION ALL SELECT 2, 'Cat' 
UNION ALL SELECT 3, 'Monkey' 
... 
UNION ALL SELECT 9999, 'Lemur' 
1

如果它是遷移(即完成一次),我想不要自己編寫代碼,而是嘗試特別的實用程序。請參閱Sql Data Examiner。 我們使用它來同步開發人員和生產數據庫結構更改以及數據更改。 數據審查員都支持Oracle和SQL服務器