1

前言

  • 本文对 Elasticsearch 7.17 适用
  • 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
  • 应注意在请求语句中使用 request_cache=true 参数。官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.17/...

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 

参考文献

本文出自 qbit snap

qbit
268 声望279 粉丝

引用和评论

0 条评论