在200ms以內的,有百分之多少,在1000毫秒以內的有百分之多少
如果想要percentile算法越精準,compression可以設置的越大
如果的確不需要doc value,比如聚合等操作,那麼可以禁用,減少磁盤空間佔用
如果要對分詞的field執行聚合操作,必須將fielddata設置爲true
打開fielddata,然後將正排索引數據加載到內存中,纔可以對分詞的field執行聚合操作,而且會消耗很大的內存
fielddata加載到內存的過程是lazy加載的,對一個analzyed field執行聚合時,纔會加載,
indices.fielddata.cache.size: 20%,超出限制,清除內存已有fielddata數據
fielddata佔用的內存超出了這個比例的限制,那麼就清除掉內存中已有的fielddata數據
默認無限制,限制內存使用,但是會導致頻繁evict和reload,大量IO性能損耗,以及內存碎片和gc
監控fielddata內存使用
GET /_stats/fielddata?fields=*
GET /_nodes/stats/indices/fielddata?fields=*
GET /_nodes/stats/indices/fielddata?level=indices&fields=*
circuit breaker
如果一次query load的feilddata超過總內存,就會oom --> 內存溢出
circuit breaker會估算query要加載的fielddata大小,如果超出總內存,就短路,query直接失敗
indices.breaker.fielddata.limit:fielddata的內存限制,默認60%
indices.breaker.request.limit:執行聚合的內存限制,默認40%
indices.breaker.total.limit:綜合上面兩個,限制在70%以內
min:僅僅加載至少在1%的doc中出現過的term對應的fielddata
比如說某個值,hello,總共有1000個doc,hello必須在10個doc中出現,那麼這個hello對應的fielddata纔會加載到內存中來
min_segment_size:少於500 doc的segment不加載fielddata
加載fielddata的時候,也是按照segment去進行加載的,某個segment裏面的doc數量少於500個,那麼這個segment的fielddata就不加載
一般不會去設置它,大家知道就好
fielddata預加載:
query-time的fielddata生成和加載到內存,變爲index-time,建立倒排索引的時候,會同步生成fielddata並且加載到內存中來,這樣的話,對分詞field的聚合性能當然會大幅度增強
序號標記預加載 global ordinal原理解釋