Apache Solr是被普遍使用的開源搜索引擎,Greenplum DB的全文檢索組件Greenplum Text就是基於其構建的:Greenplum Text簡寫爲GPText,它將Greenplum數據庫與Apache SolrCloud企業搜索和MADlib分析庫進行緊密集成,從而爲客戶提供了大規模分析處理和業務決策支持,主要功能包括免費的文本搜索以及對文本分析的支持。html
廣義來講,solr中的cache能夠分爲2大部分:solr系統的內部cache和留給操做系統的文件cache。對於前者來講,若是設置不當,不但不會提高性能,還將浪費大量內存。數據庫
根據長期爲客戶調優的經驗,本文做者將對solr cache進行簡要介紹並陳述solr cache最佳實踐。apache
solr內部cache分爲4類:緩存
你們須要留意的是這裏給出的數據結構只是樸素實現,而solr實際的內部實現比樸素實現更精良(如節省內存),特別是對於filter cache,詳見solr社區討論。數據結構
在每一個索引的solrconfig.xml中配置,配置每類索引的最大個數(size),舉例:ide
<filterCache class="solr.FastLRUCache" size="512" initialSize="512" autowarmCount="0" />
post
<queryResultCache class="solr.LRUCache" size="512" initialSize="512" autowarmCount="0" />
性能
<documentCache class="solr.LRUCache" size="512" initialSize="512" autowarmCount="0" />
ui
關於配置,你們須要留意2點內容:搜索引擎
<autoCommit>
<maxDocs>10000</maxDocs>
<maxTime>60000</maxTime>
<openSearcher>false</openSearcher>
</autoCommit>
autosoftcommit致使cache失效:每Docs/Time個週期到了會致使cache失效
<autoSoftCommit>
<maxDocs>100000</maxDocs>
<maxTime>600000</maxTime>
</autoSoftCommit>
這裏咱們經過一個例子來進行說明,假設某用戶的一個使用場景以下:
能夠得出每類cache的最大大小:
明顯可見filter cache過大,不過以上只是定性分析,便於找出可能的內存瓶頸,實際的內存開銷會更小。
5、監控
若是能夠訪問SOLR UI,能夠查看每一個core上的cache metrics統計:
http://localhost:18983/solr/#/demo.public.test_wiki_shard1_replica_n2/plugins?type=cache
若是沒法訪問SOLR UI,直接經過以下url查看:
例如,經過SOLR UI查看metrics項目
重點關注須要XXX.cumulative_hitratio:它是solr節點啓動後積累的命中率,不會受到cache清空致使的影響。
本文將要給出每類cache size的通用設置方法:
首先,持續運行系統一段時間(如一天/一週等),而後蒐集以下系統參數:1. 是否發生了OOM (out of memory) 2. 蒐集每一個索引的cumulative_hitratio(一般只須要關注最大的索引)
若是未發生OOM,請按照以下流程圖來處理:
若是發生了OOM,咱們就應該關閉或限制某類cache的大小:
一般狀況下不是內存瓶頸,所以請首先處理好前2類cache