2014-09-02 77 views
0

我在某處有殭屍嗎?在腳本退出後,Mongo繼續緩慢插入文檔

我的腳本完成插入大量的新數據。

但是,服務器繼續保持高鎖定率並緩慢插入新記錄。大約一個小時後,插入的腳本完成了,文檔仍在流入。

這些來自哪裏以及如何清除隊列? (I重構的代碼使用一個索引,並希望重新進行處理,以避免100-200%鎖率)

+2

您的腳本在插入時是否使用未確認的寫入?如果是這樣,實際插入可能發生在您的腳本完成後。 – JohnnyHK 2014-09-02 01:57:01

+0

使用db.currentOp()來檢查正在執行的操作。不安全模式寫入可能導致這種情況。 – 2014-09-02 07:48:36

回答

1

這可能是因爲以下情況下的,

1..Throughput綁定磁盤IO

一個可以考慮以下指標使用「mongostat」和「MongoDB的管理服務」:

  • 平均沖洗時間(MongoDB的週期性同步多久盤在硬件選項卡取)
  • IOStats(看具體IOWAIT)

由於磁盤IO比CPU處理時間慢,所有的插入得到排隊,這樣就可以持續更長的時間,可以檢查使用db.serverStatus()的服務器狀態並查看與鎖相關聯的「currrentQueue」的「globalLock」(作爲Write獲取全局鎖)字段以查看隊列中的作者數。

2..Another可能的原因是管理的碎片化集羣平衡已經擺在狀態(這是默認情況下)

如果你一直在集羣環境中,每當寫操作開始平衡器自動打開,以保持羣集處於平衡狀態,即使腳本完成後,平衡器也可以繼續將塊從一個碎片移動到另一個碎片。在這種情況下,我寧願建議在批量裝載時保持平衡器關閉,在這種情況下,所有文件都會放在單個碎片上,但平衡器可以在任何停機時間被踢出。

3..Write關注 這也可能會導致問題咯,如果它們被設置爲副本已確認或確認模式,它取決於你,根據你的類型的數據,對這些問題決定。