Elasticsearch 缓存相关(qbit)

Posted qbit

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch 缓存相关(qbit)相关的知识,希望对你有一定的参考价值。

前言

  • 本文对 Elasticsearch 7.10 适用
  • Elasticsearch 主要有 3 种缓存:fields cachequery cacherequest cache
  • 3 种 cache 的配置状况都可以用命令查看

    # 集群
    GET _cluster/settings?include_defaults&flat_settings
    # 索引
    GET my-index/_settings?include_defaults&flat_settings

Field Data Cache

  • 官方文档:Field data cache settings
  • Field data cache 包含 fielddataglobal ordinals,两者都主要用于聚合。
  • fielddata 和 doc_value 的相同点

    都要创建正排索引,数据结构类似于列式存储
    都是为了可以聚合,排序之类的操作
  • fielddata 和 doc_value 的不同点

    # 存储索引数据的方式不一样:
    fielddata: heap 内存存储;doc_values: OS Cache + 磁盘存储
    
    # 针对的类型,也不一样
    fielddata 主要针对的是分词字段(text);doc_values 针对大是不分词字段(keyword、int 等)
    
    # 是否开启
    fielddata 默认不开启;doc_values 默认是开启
  • 静态配置项 indices.fielddata.cache.size 是一个节点级的配置,默认无限制
  • 查看集群的 fielddata

    GET _stats/fielddata?human
  • 查看所有节点的 fielddata

    GET _nodes/stats/indices/fielddata?human
  • 查看单个节点 mzjaGC52QXeaHBXcJ1jp3gfielddata

    GET _nodes/mzjaGC52QXeaHBXcJ1jp3g/stats/indices/fielddata?human
  • 查看单个索引的 request_cache

    GET my_index/_stats/fielddata?human

Shard Request Cache

  • 官方文档:Shard request cache settings
  • request_cache 特点

    request_cache 是一个“分片级”的缓存,shard 是缓存 key 的一部分
    request_cache 主要用于 size=0 的查询,如纯聚合查询(aggs)、hits.total 和 suggestions
    request_cache 是自动失效的,失效时间就是索引的 refresh 时间(index.refresh_interval),失效的前提是分片内容确实发生了变化
    request_cache 缓存的默认大小是 JVM 堆内存的 1%,可以通过参数 indices.request.cache.size 手动设置
  • 静态配置项 indices.requests.cache.size 是一个节点级的配置,默认为 1%
  • 查看集群的 request_cache

    GET _stats/request_cache?human
  • 查看所有节点的 request_cache

    GET _nodes/stats/indices/query_cache?human
  • 查看单个节点 mzjaGC52QXeaHBXcJ1jp3grequest_cache

    GET _nodes/mzjaGC52QXeaHBXcJ1jp3g/stats/indices/request_cache?human
  • 查看单个索引的 request_cache

    GET my_index/_stats/request_cache?human

Node Query Cache

  • 官方文档:Node query cache settings
  • query_cache 是 Node 级别的缓存,主要用于缓存 filter 上下文返回的结果
  • 默认情况下,query_cache 最多可容纳 10000 个查询,最多占 JVM 堆内存的 10%。
  • indices.queries.cache.countindices.queries.cache.size 都是节点级别的配置,不能动态修改,需要修改配置文件并重启集群
  • 查看集群的 query_cache

    GET _stats/query_cache?human
  • 查看所有节点的 query_cache

    GET _nodes/stats/indices/query_cache?human
  • 查看单个节点 mzjaGC52QXeaHBXcJ1jp3gquery_cache

    GET _nodes/mzjaGC52QXeaHBXcJ1jp3g/stats/indices/query_cache?human
  • 查看单个索引的 query_cache

    GET my_index/_stats/query_cache?human

缓存清理

  • 官方文档:Clear cache API

    不分缓存类型清理缓存

    # 清理集群所有缓存
    POST _cache/clear
    # 清理单个索引缓存
    POST my_index/_cache/clear

    按缓存类型清理缓存

  • 清理 fielddata 缓存

    POST _cache/clear?fielddata=true  
    POST my-index/_cache/clear?fielddata=true  
  • 清理 query 缓存

    POST _cache/clear?query=true 
    POST my-index/_cache/clear?query=true 
  • 清理 request 缓存

    POST _cache/clear?request=true 
    POST my-index/_cache/clear?request=true 

参考文献

  • Elasticsearch2.x 三种缓存介绍:Query Cache、Request Cache、Fielddata Cache
  • 张超:扒一扒查询缓存的裤子
  • ElasticSearch中doc values和fielddata
  • ElasticSearch 缓存概览
  • Elasticsearch的Query Cache 知识梳理
本文出自 qbit snap

以上是关于Elasticsearch 缓存相关(qbit)的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch 7.x 保留字符(qbit)

Elasticsearch7 分片/快照的速度/进度(qbit)

Elasticsearch 7.x 配置 IK 自定义词典(qbit)

Ubuntu 系统缓存的查看与清空(qbit)

Python 函数缓存(qbit)

Windows 共享相关(qbit)