2012-03-21 38 views
1

我希望使用C#驅動程序將數據從MongoDB傳輸到SQL Sever。 三個集合中的數據大小約爲20,000,000。我使用3線程 讀取它和3個線程插入到3個不同的SQL Server表。將數據從MongoDB遷移到SQL Server,性能隨着時間的推移而降低

閱讀大約70,000,000個文檔後,性能變得更糟,速度大約是之前的十分之一,並且網絡帶寬下降了0.1%。

如何防止性能下降?

回答

0

嘗試在單個線程上順序遷移每個集合。該操作將是IO綁定而不是CPU綁定,因此多線程運行將更可能降低性能並增加數據庫中的資源爭用和上下文切換。

也看看你的SQL Server數據庫磁盤寫入。這可能是硬盤緩存正在使用,但隨着緩存刷新到磁盤寫入速度變慢。

+0

謝謝@Fulstow。對於一個集合,我使用一個線程從mongoDB中讀取數據,一個線程將數據插入到SQLServer.Network帶寬約爲50%,4.2MB/s。速度可以保持10分鐘左右,然後降到零,<500KB/sI認爲IO界限在讀取來自mongoDB的數據。 – lastfallen 2012-03-21 02:05:22

+0

你的SQL表有沒有索引?隨着時間的推移,插入可能會減慢。 – 2012-03-21 02:14:49

+0

SQL表具有索引。我使用一個帶寬應用來監控下載和上傳速度。下載速度是從mongoDB讀取數據的速度。它在大約10分鐘後也下降。我使用遊標來從mongoDB中枚舉文檔。我認爲原因是遊標因超時而被破壞。 – lastfallen 2012-03-21 02:37:26

相關問題