Solr Cache最佳實踐幫你輕鬆調優

2021-10-03 16:36:33 字數 1708 閱讀 7486

apache solr是被廣泛使用的開源搜尋引擎,greenplum db的全文檢索元件greenplum text就是基於其構建的:greenplum text簡寫為gptext,它將greenplum資料庫與apache solrcloud企業搜尋和madlib分析庫進行緊密整合,從而為客戶提供了大規模分析處理和業務決策支援,主要功能包括免費的文字搜尋以及對文字分析的支援。

廣義來說,solr中的cache可以分為2大部分:solr系統的內部cache和留給作業系統的檔案cache。對於前者來說,如果設定不當,不但不會提公升效能,還將浪費大量記憶體。

根據長期為客戶調優的經驗,本文作者將對solr cache進行簡要介紹並陳述solr cache最佳實踐。

solr內部cache分為4類:

大家需要留意的是這裡給出的資料結構只是樸素實現,而solr實際的內部實現比樸素實現更精良(如節省記憶體),特別是對於filter cache,詳見solr社群討論。

在每個索引的solrconfig.xml中配置,配置每類索引的最大個數(size),舉例:

前2者還可以設定maxrammb引數(版本要求:solr 6.6中不能配置,7.3.1可以):該類cache的使用記憶體上限,單位是mb。如果配置了它的話,size和initialsize引數將被忽略

另外cache的生效時間受到auto/autosoft commit引數的影響,目前最新gptext**中配置如下,autocommit不會導致cache失效(因為設定了opensearcher為false)

10000

60000

false

autosoftcommit導致cache失效:每docs/time個週期到了會導致cache失效

100000

600000

這裡我們通過乙個例子來進行說明,假設某使用者的乙個使用場景如下:

可以得出每類cache的最大大小:

明顯可見filter cache過大,不過以上只是定性分析,便於找出可能的記憶體瓶頸,實際的記憶體開銷會更小。

如果可以訪問solr ui,可以檢視每個core上的cache metrics統計:

如果無法訪問solr ui,直接通過如下url檢視:

例如,通過solr ui檢視metrics專案

重點關注需要***.cumulative_hitratio:它是solr節點啟動後積累的命中率,不會受到cache清空導致的影響。

首先,持續執行系統一段時間(如一天/一周等),然後蒐集如下系統引數:1. 是否發生了oom (out of memory) 2. 蒐集每個索引的cumulative_hitratio(通常只需要關注最大的索引) 

如果未發生oom,請按照如下流程圖來處理:

如果發生了oom,我們就應該關閉或限制某類cache的大小:

1.filter cache

2. query result cache

3. document cache  

馬洪旭,pivotal資深研發工程師 & apache hawq committer,專注於資料庫領域並熱愛開源技術,目前在pivotal從事gptext研發工作。

最佳實踐 Flutter 最佳實踐

最佳實踐是乙個領域可以接受的專業標準,對於任何程式語言來說,提高 質量 可讀性 可維護性和健壯性都非常重要。讓我們探索一些設計和開發flutter應用程式的最佳實踐。class enum typedef和extension應採用駝峰命名uppercamelcase規則。class mainscree...

JUnit最佳實踐

junit最佳實踐 cherami 轉貼 參與分 20053,專家分 4960 發表 2003 9 16 下午7 57 版本 1.0 閱讀 3899次 martin fowler說過 當你試圖列印輸出一些資訊或除錯乙個表示式時,寫一些測試 來替代那些傳統的方法。一開始,你會發現你總是要建立一些新的f...

SVN最佳實踐

楊爭 subversion是新一代的版本控制工具,由於其優於cvs的一些特點,得到了越來越多人的關注和使用,本人根據自己使用svn的經驗,寫了這篇文章,希望對大家有所幫助,其中有些實踐並不是僅僅適用於svn,對其他版本控制工具也是適用的。1 養成良好的記錄日誌的習慣.svn ci提交,最好在日誌中記...