Solr4 0效能調優之快取配置

2021-09-01 18:22:51 字數 2835 閱讀 5357

[size=medium]  solr配置檔案[solrconfig.xml]有三種快取分別是 filtercache,queryresultcache,documentcache但solr是在什麼時候,什麼情況下會用到這些快取呢,通過看solr的原始碼,下面對solr三種快取做說明:[list][1]. filter cache(過濾器快取),用於儲存過濾器(fq 引數)和層面搜尋的結果

[2]. document cache(文件快取),用於儲存 lucene 文件儲存的字段

[3]. query result(查詢快取),用於儲存查詢的結果

[/list]

通過這3種快取,可以對solr的搜尋例項進行調優。調整這些快取,需要根據索引庫中文件的數量,每次查詢結果的條數等。在調整引數前,需要事先得到 solr 示例中的以下資訊:[list][1]. 索引中文件的數量

[2]. 每秒鐘搜尋的次數

[3]. 過濾器的數量

[4]. 一次查詢返回最大的文件數量

[5]. 不同查詢和不同排序的個數

[/list]

solr中主要是lrucache,主要使用的是lru是least recently used最近最少使用演算法。lru演算法的描述如下:

[align=left][color=darkblue][b]lru演算法[/b][/color][/align]

記憶體管理的一種演算法,對於在記憶體中但最近又不用的資料塊(記憶體塊)叫做lru,oracle會根據那些資料屬於lru而將其移出記憶體而騰出空間來載入另外的資料。

什麼是lru演算法? lru是least recently used的縮寫,即最近最少使用頁面置換演算法,是為虛擬頁式儲存管理服務的。

關於作業系統的記憶體管理,如何節省利用容量不大的記憶體為最多的程序提供資源,一直是研究的重要方向。而記憶體的虛擬儲存管理,是現在最通用,最成功的方式—— 在記憶體有限的情況下,擴充套件一部分外存作為虛擬記憶體,真正的記憶體只儲存當前執行時所用得到資訊。這無疑極大地擴充了記憶體的功能,極大地提高了計算機的併發度。虛擬頁式儲存管理,則是將程序所需空間劃分為多個頁面,記憶體中只存放當前所需頁面,其餘頁面放入外存的管理方式。

然而,有利就有弊,虛擬頁式儲存管理減少了程序所需的記憶體空間,卻也帶來了執行時間變長這一缺點:程序執行過程中,不可避免地要把在外存中存放的一些資訊和記憶體中已有的進行交換,由於外存的低速,這一步驟所花費的時間不可忽略。因而,採取盡量好的演算法以減少讀取外存的次數,也是相當有意義的事情。

我們可以通過solr管理介面檢視快取的狀態,也可以通過日誌進行檢視。下圖是我進行的引數設定後的狀態:

[img]

[align=left][b]引數說明:[/b][/align][list][1]. lookups: 查詢次數

[2]. hits: 命中次數

[3]. hitratio:命中率

[4]. inserts: 插入數量

[5]. evictions:剔除數量

[/list]

[/size]

[align=left][size=x-large][color=darkblue]快取配置solrconfig.xml[/color][/size][/align][size=large]filtercache 快取[/size]

[size=medium]  filtercache:當搜尋請求引數中帶有引數"ids"時,solr會去filtercache里查,filtercache裡key是query,值是docset,,也就是無序的document id,如果有多個ids裡包含多個id,則用分隔符「,」分開。如果filtercache中沒有對應的值,則通過reader都查詢對應的docset,並新增到filtercache快取中。[/size]

[size=large]queryresultcache 快取[/size]

[size=medium]  如果搜尋請求引數沒有ids引數時,則會不去filtercache快取裡找,而且沒有filter時,才是去queryresultcache裡查詢,queryresultcache裡儲存的是有序的doclist。在查到doclist後,回去取docset,即會在filtercache中查,沒有的話會加到filtercache中,如果queryresultcache快取中沒有值,也先去取docset,即通過filtercache,沒有對應的值的話,則重新構建,新增到快取中,則通過一般的查詢方式找到。然後新增到queryresultcache快取中。[/size]

[size=large]documentcache 快取[/size]

[size=medium]  documentcache 是在通過doc(int i) 方法取document時,用到的。 documentcache 不存在的話,這通過reader去取,取到document後,新增到documentcache 快取。[/size]

[size=large]fieldvaluecache 快取[/size]

[size=medium]  fieldvaluecache 快取是在solr元件facetcomponent元件裡發貨作用的。條件是如果要統計的field是multivalued,也就是有多個值的情況,solr 會根據field建立乙個field反正類uninvertedfield,通過註解大概了解是節約記憶體和加速facet統計。[/size]

[size=large]httpcache 快取[/size]

[size=medium]  solr httpcache 主要是用來判斷當前的搜尋請求request的請求頭header的if-modified-since和if-none-match的兩個值。[/size]

SOLR快取調優

快取在 solr 中充當了乙個非常重要的角色,solr 中主要有這三種快取 還有第四種快取,lucene 內部的快取,不過該快取外部無法控制到。通過這 3 種快取,可以對 solr 的搜尋例項進行調優。調整這些快取,需要根據索引庫中文件的數量,每次查詢結果的條數等。在調整引數前,需要事先得到 sol...

SOLR 效能調優

索引建立的效能因素 1 引數mergefactor 表明索引段合併時所具有索引段的數量,即索引段合併的頻率。該值越大,則索引合併頻率越低,索引建立的速度快。反之將造成建立索引的開銷加大。但 是值得注意的是如果配置過大,容易出現表中mergefactor 100 時的極端情形,索引檔案成 級數量增長而...

SOLR 效能調優

索引建立的效能因素 1 引數mergefactor 表明索引段合併時所具有索引段的數量,即索引段合併的頻率。該值越大,則索引合併頻率越低,索引建立的速度快。反之將造成建立索引的開銷加大。但 是值得注意的是如果配置過大,容易出現表中mergefactor 100 時的極端情形,索引檔案成 級數量增長而...