2012-01-23 98 views
0

我有一個248 MB的日誌文件,它可以擴展到GB。因此,您可以想象有多少行可以存在。我需要將所有行導入到SQL Server數據庫中的表中。爲此,我首先創建一個DataTable,並將日誌文件中的所有行作爲新行添加到該DataTable中。這發生得非常快。大約30秒內將有超過一百萬條記錄添加到表格中。在表格中填入行後,然後使用存儲過程將DataTable中的記錄導入到數據庫中。然而這個階段執行得非常嚴重。現在我想知道,如果我應該使用SqlBulkCopy WriteToServer方法,還是應該保持這種方式?如果SqlBulkCopy是一個更好的選擇,那麼我應該使用DataTable還是IDataReader版本。提前致謝。我應該使用SqlBulkCopy還是存儲過程導入數據

回答

2

我會用SqlBulkCopy進行任何真實卷的數據導入。與SqlDataAdapter的性能差異可能很大。例如我blogged作爲進口100K行性能對比:

SqlBulkCopy的:1.5885s
的SqlDataAdapter:25.0729s

如果您使用SqlBulkCopy的,這在我的測試用了進口一TableLock選項你可以得到更大的吞吐量然後下降到0.8229s。

還值得注意的是,使用SqlBulkCopy,可以讓多個實例並行地將一段數據批量加載到相同的目標表中,而不會相互爭用。道歉爲另一external link,但我認爲這是相關的。這是關於加載到堆表中,沒有索引,以獲得最佳性能,這可能不是您當前場景的選項,但絕對值得了解。

+0

正如你在SqlBulkCopy中練習了很多東西,你可能會知道爲什麼我會得到「Timeout過期,完成之前超時的時間......」的錯誤。我將連接超時增加到600秒。但是我在不到半分鐘的時間裏就會看到這個錯誤。 –

+0

嘗試在SqlBulkCopy上設置BulkCopyTimeout(以秒爲單位):http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.bulkcopytimeout.aspx – AdaTheDev

+0

非常感謝@AdaTheDev。你節省了我很多時間 –

相關問題