我需要插入數百萬條正在從磁盤讀取到SQL服務器的記錄。我在一臺機器上解析了這些文件,這是一個單線程的過程。將大量記錄插入SQL Server數據庫的最快方法是什麼?
理想我希望它表現良好,如果SQL服務器是本地還是遠程。它必須在C#中以編程方式完成。
我需要插入數百萬條正在從磁盤讀取到SQL服務器的記錄。我在一臺機器上解析了這些文件,這是一個單線程的過程。將大量記錄插入SQL Server數據庫的最快方法是什麼?
理想我希望它表現良好,如果SQL服務器是本地還是遠程。它必須在C#中以編程方式完成。
最快方式是使用SSIS具有平行讀,NUMA affinitizes客戶端,分區寫入和所有分區切換到一個表中底。這會加載你more than 2 TB per hour。
如果您有合適的文本文件,那麼可能會批量複製實用程序。
如果您想從您的進程中插入,則可以使用SqlBulkCopy.WriteToServer,但必須將數據作爲IDataReader呈現,或者可以使用straigh SqlCommand插入。之後,如果你批量插入提交,你將會獲得一個很好的trhoughput。通常的瓶頸是單語句提交時的日誌刷新。
嘗試bulk copy。您可以使用SqlBulkCopy class來編寫一個小應用程序來讀取內存中的數據並將其加載到SQL Server中。
取決於你的輸入文件格式(1)它是適合批量複製,所以,使用它,(2)它不適合批量複製或你需要額外的處理/檢查/等。在服務器 - 邊所以不要跳與多線程插入循環,承諾每1000行以上,並且可能使用陣列插入
我很高興我沒有嘗試回答這個問題......我敢肯定它在他的情況下不太實際(我猜他最終會使用批量複製),但哇,相當「最快」的方式。 .. – LorenVS 2009-12-12 00:23:56
這是不真實的,但是是有用的信息作爲參考知道什麼是可能的。一旦你看到專業人員如何做到這一點,你可以找到創新的方法將其應用於手頭的任務。 – 2009-12-12 00:26:07
我興奮的只是想着這麼做......:D真棒回答... !!! – KSimons 2009-12-12 00:48:35