我有一個248 MB的日誌文件,它可以擴展到GB。因此,您可以想象有多少行可以存在。我需要將所有行導入到SQL Server數據庫中的表中。爲此,我首先創建一個DataTable,並將日誌文件中的所有行作爲新行添加到該DataTable中。這發生得非常快。大約30秒內將有超過一百萬條記錄添加到表格中。在表格中填入行後,然後使用存儲過程將DataTable中的記錄導入到數據庫中。然而這個階段執行得非常嚴重。現在我想知道,如果我應該使用SqlBulkCopy WriteToServer方法,還是應該保持這種方式?如果SqlBulkCopy是一個更好的選擇,那麼我應該使用DataTable還是IDataReader版本。提前致謝。我應該使用SqlBulkCopy還是存儲過程導入數據
0
A
回答
2
我會用SqlBulkCopy進行任何真實卷的數據導入。與SqlDataAdapter的性能差異可能很大。例如我blogged作爲進口100K行性能對比:
SqlBulkCopy的:1.5885s
的SqlDataAdapter:25.0729s
如果您使用SqlBulkCopy的,這在我的測試用了進口一TableLock選項你可以得到更大的吞吐量然後下降到0.8229s。
還值得注意的是,使用SqlBulkCopy,可以讓多個實例並行地將一段數據批量加載到相同的目標表中,而不會相互爭用。道歉爲另一external link,但我認爲這是相關的。這是關於加載到堆表中,沒有索引,以獲得最佳性能,這可能不是您當前場景的選項,但絕對值得了解。
相關問題
- 1. 我應該使用sp_executesql還是EXEC運行存儲過程?
- 2. 我應該使用mysql還是ssdb來存儲like/vote數據?
- 3. 我應該使用NSUserDefaults還是plist來存儲數據?
- 4. 在Delphi中,我應該從循環內使用多個數據庫插入還是使用存儲過程?
- 5. 我應該使用T-SQL函數,查看還是存儲過程?
- 6. 靜態數據應該存儲在數據庫還是應用程序中
- 7. 我應該使用表鎖,而插入數據使用多線程SqlBulkCopy
- 8. 存儲過程而不是SqlBulkCopy
- 9. 我應該在Mongo之前還是之後存儲數據?
- 10. 我應該使用文件還是數據庫表來存儲參數?
- 11. 應該通過構造函數注入一個存儲庫還是使用?
- 12. MySQL導入數據。我可以導入存儲過程嗎?
- 13. C#應用程序 - 我應該使用存儲過程還是使用C#編程技術的ADO.NET?
- 14. 我應該使用道具還是狀態來存儲TreeView數據?
- 15. 我應該使用哪個商店:文檔存儲還是SQLite?
- 16. 我應該使用Amazon S3還是SimpleDB存儲小文檔?
- 17. 用於存儲過程的SqlBulkCopy
- 18. 我應該從客戶端還是通過存儲過程刪除子對象
- 19. 存儲過程應該很多還是集中?
- 20. 存儲過程架構 - 我的MVC應用程序是否應該處理存儲過程,還是應該類似於「工作人員角色」來處理它?
- 21. 我應該使用from_xml還是from_json來導入對象?
- 22. 我應該將數據存儲在Umbraco還是定製的數據層中
- 23. 緩存圖像和數據時應該使用內部還是外部存儲?
- 24. 我應該使用數據集還是數據表?
- 25. 我應該在數據庫中存儲Type還是應該將其存儲在枚舉中?
- 26. 我應該在mysql數據庫中存儲雙精度數還是小數?
- 27. 我應該總是使用服務,還是可以直接使用存儲庫?
- 28. 我應該進入Android Studio還是應該堅持使用Eclipse?
- 29. 使用存儲過程將數據從MS Sql導入到MySQL
- 30. 我應該使用JSON還是AJAX作爲響應數據?
正如你在SqlBulkCopy中練習了很多東西,你可能會知道爲什麼我會得到「Timeout過期,完成之前超時的時間......」的錯誤。我將連接超時增加到600秒。但是我在不到半分鐘的時間裏就會看到這個錯誤。 –
嘗試在SqlBulkCopy上設置BulkCopyTimeout(以秒爲單位):http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.bulkcopytimeout.aspx – AdaTheDev
非常感謝@AdaTheDev。你節省了我很多時間 –