2017-02-20 66 views
0

我們有以下細節的羣集: 1.操作系統:Windows 7(64位) 2.數字節點:2(i7處理器,8GB RAM) 3. ES版本: 2.4.4Elasticsearch慢慢進行時的數據大小增加

我們創建了一個索引與以下細節: 1.索引的大小:86千兆 2號碎片:12 3.數字副本:無 5.文件數量:1.4億 6.字段數:15 6.對於大多數我們已經設置了場「指數」:「not_analyzed」 7.對於一些領域,我們設置了「IND離「:‘否’ 8.我們不執行任何全文檢索,聚集或排序 9.對於2個字段,我們使用編輯距離的模糊性1個

12碎片是在2個節點均勻分佈(6各自的碎片)。我們在該羣集上運行多搜索查詢,其中每個多搜索請求由6個單獨的查詢組成。

我們查詢花費過多的時間來執行。在「take」字段中,我們可以看到每個單獨的查詢需要3-8秒的時間。他們很少執行毫秒。

魅力。結果集中返回的記錄數大約爲800(最大10k條記錄和最少10條記錄)。

當我們運行了同樣的測試在相對小的數據集(10萬條記錄,其中有7 GB的大小)的則每個單獨的查詢花時間在50-200毫秒的範圍內。 可能有人建議什麼可能導致我們的查詢運行緩慢索引大小增加時?

  1. 也許您還使用旋轉磁盤:xeraa的響應後

    更新?

  2. 800文件(或更多)聽起來很多。你總是需要那麼多嗎?
    • 並不是所有的,但很少的個人查詢返回大量的文檔,我們確實需要所有這些。
  3. 您是否將堆大小設置爲4GB(可用內存的一半)?
  4. 爲什麼12個碎片?如果你只有2個節點,這聽起來有點過分(但可能不會產生巨大的影響)。
    • 因此,隨着數據的增長,我們可以在以後增加更多的節點(不需要reindex)。
  5. 也許你可以看到一個查詢?這聽起來代價很高,您的6個人查詢

    • 以下是使用的2個示例查詢。多搜索中總共包含6個類似的查詢。

    POST/_msearch { 「指數」: 「學校」} { 「查詢」:{ 「布爾」:{ 「必須」:[{ 「布爾」:{ 「應「:{ 」範圍「:{ 」標記「:{ 」從「: 」億「, 」到「: 」2億「, 」include_lower「:真, 」include_upper「:真 }}} }},{ 「嵌套」:{ 「quer Y」:{ 「匹配」:{ 「查詢」: 「25」, 「字段」:[ 「subject.chapter」]}}, 「路徑」: 「受試者」 }}]}}} { 「指數」: 「學校」} { 「查詢」: { 「布爾」: 「嵌套」{ :{ 「必須」{ 「查詢」:{ 「匹配」:{ 「query」:「A100123」, 「fields」:[「student.id」], 「fuzziness」:「1」 }}, 「path」:「student」 }}}}}

回答

0

1.4億文件意味着數據的86GB那麼我想千萬文檔轉換爲小於8GB數據。所以較小的數據集可以從內存中提供(至少大部分是使用兩個8GB節點),而較大的數據集需要從磁盤提供。也許你也在使用旋轉磁盤?在任何情況下,物理定律都會使你的整個數據集比較小的數據集慢。

各種各樣的東西你可以看看:

  • 800文件(或更多)聽起來很多。你總是需要那麼多嗎?
  • 您是否將堆大小設置爲4GB(可用內存的一半)?
  • 爲什麼12個碎片?如果你只有2個節點,這聽起來有點過分(但可能不會產生巨大的影響)。
  • 也許你可以看到一個查詢? 6個人查詢聽起來代價不菲
+0

感謝您的回覆。 我已經更新了問題以及您的查詢。 希望這有助於。 –

+0

這看起來並不漂亮:旋轉磁盤,父子關係,潛在的大結果集,2個節點上的12個分片(默認情況下,每個分片都會計算前10個結果),msearch可以節省您往返時間,但是您必須等待所有的查詢完成,... 此外你的布爾查詢看起來有點不尋常;您必須在必須數組中使用單個元素或單個should子句 – xeraa

+0

繼續前進我將添加x-pack監視(有一個免費許可證)並運行查詢以監視內存,IO,隊列,throuput ...一旦你確定了瓶頸,對它們進行處理 – xeraa