2016-07-28 107 views
0

我正在從動態導出海量數據集到彈性搜索。 以下是步驟:彈性搜索批量上傳隨着時間的推移而減慢

  1. 從SQL獲取數據(我正在使用實體框架)。我們將主要類型命名爲聯繫人。
  2. 然後,我按定義的大小對數據進行分組並將其序列化。
  3. 根據ES Docs批量上傳的格式數據
  4. 調用HttpPost並將數據發送到ES端點。

我正在做廣泛的日誌記錄所需的時間和任何錯誤。

這一切工作,我的出口在一小時內出口數據。

也就是說,我觀察到HttpPost的響應時間不斷增加。我已經尋找任何我可以擁有的內存泄漏,或者我應該處理的任何內存泄漏。我想確保它不會在以後困擾我。

那麼,響應時間增加的可能原因是什麼? 我應該如何去調查這個問題?

回答

0

我使用ES 1.7和我使用類似的方案索引大約10萬個文檔。 根據我的經驗,如果您將ES推入硬盤,它會減速並且有時會因OutOfMemory異常而失敗。 我不知道它是否仍然是新版本的問題。

恕我直言,這是因爲ES需要一些時間來處理大塊 - 它接受數據,索引它,但之後它做了一些後臺工作來優化索引。

爲了解決這個問題,我嘗試了一些參數:單個批量大小(N),索引塊(S1)之間的睡眠時間以及幾個(M)塊(S2)之間更長的睡眠時間。 對於我的數據集和我的硬件,我以N = 5000,S1 = 1s,M = 10,S2 = 10s結束。 要選擇安全值,我觀察CPU,內存和I/O的使用情況。例如,長時間增加的I/O使用可能表明ES很快就會中斷。

我確定它非常依賴於你所擁有的硬件,特別是給ES儘可能多的內存!

+0

這對我有用。我基本上找到了批量上傳的最佳位置。 – Alok

相關問題