2013-07-01 34 views
1

使用perl腳本插入了900萬條記錄文件。沒有使用批量插入/ mongoimport,因爲在插入之前需要對每條記錄進行一些處理。MongoDB插入暫停不一致(或被換出)

該程序需要40分鐘才能完成,但由於某種原因,它會一直暫停(換出?),因此運行時間加倍,三倍,有時會變得難以忍受。我有7 GB內存,當我使用免費-m檢查時,它說我在程序運行時有大約5 GB的可用RAM。我沒有任何耗費資源的進程正在運行。這種緩慢的原因是什麼?這是一個mongo問題還是操作系統問題?我該如何着手解決這個問題?謝謝。

+1

默認情況下,Mongo每隔一分鐘就會將寫入操作與光盤同步,因此當插入操作很快時,每分鐘都需要在磁盤上刷新它們,從而增加I/O。這可能會導致您的暫停。 –

+0

哦有什麼辦法可以解決這個問題嗎?也許指示Mongo在每個小時或之後刷新?謝謝(你的)信息。 – Sai

+1

設置[syncdelay](http://docs.mongodb.org/manual/reference/configuration-options/#syncdelay)設置 –

回答

1

默認情況下,Mongo每隔一分鐘就會將寫入操作與光盤同步,因此當插入操作很快時,每分鐘都需要在磁盤上刷新它們,從而增加I/O。這會導致每分鐘減速。

您可以更改default setting較高,但會丟失在停電的情況下,你的數據,或者你可以FSYNC每秒 - 在這種情況下,整個操作會更慢一些,但
持續速度。

+0

哦..這可能對你來說真的很明顯,但是我可以在一天晚些時候同步所有內容。這樣一旦插入完成,我做了必要的查詢,然後我可以運行fsync作爲背景,而不用擔心速度? – Sai

+1

查看[fsync](http://docs.mongodb.org/manual/reference/command/fsync/) –

+0

好的。得到它了。謝謝 :) – Sai