2013-10-17 75 views
1

我正在從傳統的 主從模型轉換到SolrCloud。我使用的是Solr 4.4,並設置了2個分片,每個分片有1個 副本。我有3個動物園管理員合奏。所有節點都在AWS EC2實例上運行。碎片位於m1.xlarge並共享動物園管理員實例 (安裝在單獨的捲上)。 6 GB內存分配給每個solr 實例。Solrcloud性能問題

我在索引中有大約1000萬個文檔。使用先前的獨立型號 模型,查詢平均在100毫秒左右。目前爲止,SolrCloud查詢響應已有 。查詢響應時間超過1000ms,經常到達 2000ms。由於額外的服務器,網絡延遲等原因,我預計會出現一些波動,但這種差異真的讓人困惑。在這兩種情況下,硬件都是 類似,除了SolrCloud節點的兩個對象共享動物園管理員的事實是 。 m1x.large I/O很高,因此也不應該是 的瓶頸。

與舊設置的另一個區別是,我使用新的 CloudSolrServer類,該類具有3動物園管理員參考,用於加載 平衡。但我不認爲它會產生任何重大影響,因爲從Solr管理查詢面板執行的查詢 確認緩慢。

下面是我的一些配置設置的:

提交頻率


<autoCommit> 
     <maxTime>30000</maxTime> 
     <openSearcher>false</openSearcher> 
</autoCommit> 

<autoSoftCommit> 
     <maxTime>1000</maxTime> 
</autoSoftCommit> 

布爾子句:

 
<maxBooleanClauses>1024</maxBooleanClauses> 
緩存設置:


<filterCache class="solr.FastLRUCache" size="16384" initialSize="4096" 
autowarmCount="4096"/> 

<queryResultCache class="solr.LRUCache" size="16384" initialSize="8192" 
autowarmCount="4096"/> 

<documentCache class="solr.LRUCache" size="32768" initialSize="16384" 
autowarmCount="0"/> 

<fieldValueCache class="solr.FastLRUCache" size="16384" 
autowarmCount="8192" showItems="4096" /> 

<enableLazyFieldLoading>true</enableLazyFieldLoading> 

<queryResultWindowSize>200</queryResultWindowSize> 

<queryResultMaxDocsCached>400</queryResultMaxDocsCached> 

查詢監聽器:


<listener event="newSearcher" class="solr.QuerySenderListener"> 
     <arr name="queries"> 
       <lst><str name="q">line</str></lst> 
       <lst><str name="q">xref</str></lst> 
       <lst><str name="q">draw</str></lst> 
     </arr> 
     </listener> 
       <listener event="firstSearcher" 
class="solr.QuerySenderListener"> 
         <arr name="queries"> 
           <lst><str name="q">line</str></lst> 
           <lst><str name="q">draw</str></lst> 
           <lst><str name="q">line</str><str 
name="fq">language:english</str></lst> 
           <lst><str name="q">line</str><str 
name="fq">Source2:documentation</str></lst> 
           <lst><str name="q">line</str><str 
name="fq">Source2:CloudHelp</str></lst> 
           <lst><str name="q">draw</str><str 
name="fq">language:english</str></lst> 
           <lst><str name="q">draw</str><str 
name="fq">Source2:documentation</str></lst> 
           <lst><str name="q">draw</str><str 
name="fq">Source2:CloudHelp</str></lst> 
         </arr> 
</listener> 

<maxWarmingSearchers>2</maxWarmingSearchers> 

請求處理程序:

code> 
<requestHandler name="/cloudhelp" class="solr.SearchHandler"> 
       <lst name="defaults"> 
         <str name="echoParams">explicit</str> 
         <float name="tie">0.01</float> 
         <str name="wt">velocity</str> 
         <str name="v.template">browse</str> 
         <str 
name="v.contentType">text/html;charset=UTF-8</str> 
         <str name="v.layout">layout</str> 
         <str name="v.channel">cloudhelp</str> 

         <str name="defType">edismax</str> 
         <str name="q.alt">*:*</str> 
         <str name="rows">15</str> 
         <str 
name="fl">id,url,Description,Source2,text,filetype,title,LastUpdateDate,PublishDate,ViewCount,TotalMessageCount,Solution,LastPostAuthor,Author,Duration,AuthorUrl,ThumbnailUrl,TopicId,score</str> 
         <str name="qf">text^1.5 title^2 IndexTerm^.9 
keywords^1.2 ADSKCommandSrch^2 ADSKContextId^1</str> 
         <str name="bq">Source2:CloudHelp^3 
Source2:youtube^0.85</str> 
         <str 
name="bf">recip(ms(NOW,PublishDate),3.16e-11,1,1)^2.0</str> 
         <str name="df">text</str> 


         <str name="facet">on</str> 
         <str name="facet.mincount">1</str> 
         <str name="facet.limit">100</str> 
         <str name="facet.field">language</str> 
         <str name="facet.field">Source2</str> 
         <str name="facet.field">DocumentationBook</str> 
         <str name="facet.field">ADSKProductDisplay</str> 
         <str name="facet.field">audience</str> 


         <str name="hl">true</str> 
         <str name="hl.fl">text title</str> 
         <str name="f.text.hl.fragsize">250</str> 
         <str name="f.text.hl.alternateField">ShortDesc</str> 


         <str name="spellcheck">true</str> 
         <str name="spellcheck.dictionary">default</str> 
         <str name="spellcheck.collate">true</str> 
         <str name="spellcheck.onlyMorePopular">false</str> 
         <str name="spellcheck.extendedResults">false</str> 
         <str name="spellcheck.count">1</str> 
       </lst> 
       <arr name="last-components"> 
         <str>spellcheck</str> 
       </arr> 
     </requestHandler> 

有一件事我注意到的是,queryresultcache命中率非常低, 不知道我們的查詢始終是這一獨特。我使用edismax,並有 a recip(ms(NOW,PublishDate),3.16e-11,1,1)^ 2.0,可以 這個貢獻?

對不起,很長的文章,但我很難找到這裏的問題, 特別是當查詢運行良好的主從環境與 類似的硬件和網絡。

任何指針將不勝感激。

  • 感謝
+0

是否有任何索引在後臺運行?主/從使用什麼版本?如果您在後臺使用相同的SOLR 4.4而不編制索引,則不應該有重大區別。這是相同的分佈式搜索。 – lexk

+0

@lexk即使沒有索引,性能也不好。對於主從,我使用4.2。這正是我選擇最新版本時的理解,它具有針對Solr Cloud的特定功能和修復程序。而且,硬件規格對於兩種環境都是相同的,唯一不同的是Solrcloud有4臺服務器,而早期只有1臺從服務器。 – Shamik

回答

1

感謝注:

唯一的區別是Solrcloud有哪些,只有1 從服務器前面4臺服務器。

默認情況下,SolrCloud在活動節點之間分發請求並整理結果。我的建議是利用Document and Query Routing among shard,這將提供最佳性能。