【Elasticsearch管理】缓存机制

缓存

Field data cache(字段数据缓存)

字段数据缓存主要用于对字段进行排序或对字段计算聚合。它将所有字段值加载到内存中,以便提供基于文档的对这些值的快速访问。

为字段构建字段数据缓存的成本可能很高,因此建议使用足够的内存来分配它,并保持其加载。

字段数据缓存使用的内存量可以使用indices.fielddata.cache.size来控制。

注意:重新加载不适合你缓存的字段数据将是昂贵的,性能很差。

indices.fielddata.cache.size
字段数据缓存的最大大小,如节点堆空间的30%,或绝对值,如12GB。默认为无限。

关联配置 Field data circuit breaker(熔断器)

这些是静态设置,必须在集群中的每个数据节点上配置。

字段数据的内存使用情况(节点级别):

curl -XGET "http://node02:9200/_nodes/stats/indices/fielddata?human"

响应:

"memory_size" : "552b",
"memory_size_in_bytes" : 552,
"evictions" : 0

根据索引查看:

curl -XGET "http://node02:9200/out-7.7.0-2020.10.29/_stats/fielddata?human"

Node query cache(节点查询缓存)

查询缓存负责缓存查询的结果。每个节点都有一个由所有分片共享的查询缓存。缓存实现了一种LRU回收策略:当缓存满了时,会回收最近最少使用的数据,以便为新数据让路。

无法查看被缓存的内容。

查询缓存仅缓存在filter上下文中使用的查询。

以下设置是静态的,必须在集群中的每个数据节点上配置:

indices.queries.cache.size 
控制 filter cache的内存大小,默认为10%。接受百分比值(如5%)或精确值(如512mb)。

以下设置是一个索引设置,可以在每个索引的基础上配置:

index.queries.cache.enabled 
控制是否启用查询缓存。接受true(默认值)或false。

节点查询缓存使用情况:

curl -XGET "http://node02:9200/_nodes/stats/indices/query_cache?human"

响应:

    "query_cache" : {
          "memory_size" : "0b",
          "memory_size_in_bytes" : 0,
          "total_count" : 96,
          "hit_count" : 0,
          "miss_count" : 96,
          "cache_size" : 0,
          "cache_count" : 0,
          "evictions" : 0
        }

索引查询缓存的使用情况:

curl -XGET "http://node02:9200/out-7.7.0-2020.10.29/_stats/query_cache?human"

Indexing buffer(索引缓冲区)

索引缓冲区用于存储新索引的文档。当它填满时,缓冲区中的文档被写到磁盘上的一个段。它可以在节点上的所有分片上划分。

以下设置是静态的,必须在集群中的每个数据节点上配置:

indices.memory.index_buffer_size 
接受百分比或字节大小值。默认值为10%,这意味着分配给一个节点的堆总量的10%将用作所有分片之间共享的索引缓冲区大小。

indices.memory.min_index_buffer_size 
如果index_buffer_size指定为百分比,那么这个设置可以用来指定绝对最小值。默认为48 mb。

indices.memory.max_index_buffer_size 
如果index_buffer_size指定为百分比,那么这个设置可以用来指定绝对最大值。默认为无限。

Shard request cache(分片请求缓存)

当针对一个索引或多个索引运行搜索请求时,每个涉及的分片都在本地执行搜索,并将其本地结果返回到协调节点,该节点将这些分片级结果合并为一个“全局”结果集。

分片级请求缓存模块在每个分片上缓存本地结果。 这允许频繁使用(并且可能很繁重)的搜索请求几乎立即返回结果。 请求高速缓存非常适合日志记录用例,在这种情况下,只有最新索引才被主动更新-较旧索引的结果将直接从缓存中提供。

默认情况下,请求缓存将仅缓存size = 0时的搜索请求结果,因此将不缓存hits,但将缓存hits.total,aggregations, 和suggestions。

使用now的大多数查询无法缓存。

缓存失败

缓存是自动化的——它保持了与非缓存搜索相同的接近实时的结果。

缓存的结果在分片刷新时自动失效,但只有在分片中的数据实际发生更改时才会失效。换句话说,您将总是从缓存中获得与未执行的搜索请求相同的结果。

刷新间隔越长,缓存的记录保持有效的时间就越长。如果缓存已满,那么最近最少使用的缓存键将被逐出。

手动调整缓存过期:

POST /kimchy,elasticsearch/_cache/clear?request=true

启用/禁用缓存

默认情况下,缓存是启用的,但可以禁用时,创建一个新的索引如下:

PUT /my_index
{
  "settings": {
    "index.requests.cache.enable": false
  }
}

也可以动态启用或禁用一个现有的索引的设置:

PUT /my_index/_settings
{ "index.requests.cache.enable": true }

根据请求启用/禁用缓存

request_cache查询字符串参数可用于根据每个请求启用或禁用缓存。如果设置,它将覆盖索引级设置:

GET /my_index/_search?request_cache=true
{
  "size": 0,
  "aggs": {
    "popular_colors": {
      "terms": {
        "field": "colors"
      }
    }
  }
}

如果你的查询使用的脚本,其结果是不确定的(例如,它使用一个随机函数或引用当前时间),你应该设置request_cache标志为false,以禁用该请求的缓存。

即使在索引设置中启用了请求缓存,size大于0的请求也不会被缓存。要缓存这些请求,需要使用query-string参数。

缓存Key

整个JSON主体被用作缓存键。这意味着如果JSON发生了变化——例如,如果键以不同的顺序输出——那么缓存键将不会被识别。

大多数JSON库都支持一种规范模式,该模式确保JSON键始终按照相同的顺序发出。此规范模式可用于应用程序中,以确保始终以相同的方式序列化请求。

缓存是在节点级别管理的,默认最大大小为堆的1%。可以在config/elasticsearch.yml中更改:

indices.requests.cache.size: 2%

此外,还可以使用indices.requests.cache.expire设置,以指定缓存结果的TTL。当索引刷新时,陈旧的结果将自动失效。此设置仅为完整性起见而提供。

缓存使用监控

节点级别的缓存使用情况查看:

GET /_nodes/stats/indices/request_cache?human

响应:

"request_cache" : {
          "memory_size" : "917.7kb",
          "memory_size_in_bytes" : 939768,
          "evictions" : 0,
          "hit_count" : 3944,
          "miss_count" : 1342
        }

索引级别的缓存使用情况查看:

curl -XGET "http://node02:9200/_stats/request_cache?human"
curl -XGET "http://node02:9200/out-7.7.0-2020.10.29/_stats/request_cache?human"

缓存查询

curl -XGET "http://node02:9200/_nodes/stats/indices/fielddata,query_cache,request_cache?human"

熔断机制

Elasticsearch包含多个断路器用于防止操作造成OutOfMemoryError。每个断路器指定了它可以使用多少内存的限制。

此外,还有一个父级断路器,它指定可以跨所有断路器使用的内存总量。这些设置可以在活动集群上动态更新。

Parent circuit breaker(父级断路器)

Parent circuit breaker可配置如下设置:

indices.breaker.total.limit 
Parent circuit breaker的总的起始限制,默认为JVM堆的70%。

Field data circuit breaker(字段数据断路器)

field data circuit breaker 允许Elasticsearch测算需要加载的字段数据内存总量。然后,它可以通过引发异常来防止字段数据加载。默认情况下,该限制配置为最大JVM堆的60%。可配置以下参数:

indices.breaker.fielddata.limit 
字段数据内存限制,默认为JVM堆的60%

indices.breaker.fielddata.overhead 
字段数据负载,一个常数,默认为1.03

Request circuit breaker(请求断路器)

Request circuit breaker允许Elasticsearch防止每个请求的数据结构(例如,在请求期间用于计算聚合的内存)超过一定数量的内存。

indices.breaker.request.limit 
请求内存限制,默认为JVM堆的60%

indices.breaker.request.overhead 
请求负载,一个常数,默认为1

执行的 requests circuit breaker允许Elasticsearch限制所有当前活跃的传入请求的内存使用在传输或HTTP水平超过一个节点上的一定数量的内存。内存使用情况基于请求本身的内容长度。

network.breaker.inflight_requests.limit 
挂起的请求短路器内存限制,默认为100%的JVM堆。这意味着,它由父断路器控制。

network.breaker.inflight_requests.overhead 
所有挂起请求的负载,一个常数,默认为1。

Accounting requests circuit breaker

Accounting requests circuit breaker允许Elasticsearch限制请求完成后未释放的内存中所保存内容的内存使用量。 这包括Lucene段占用的内存。

indices.breaker.accounting.limit 
计费断路器内存限制,默认为JVM堆的100%。这意味着,它是由限父断路器控制。

indices.breaker.accounting.overhead 
计费断路器负载,一个常数,默认为1

脚本编译断路器

与以前的基于内存的断路器略有不同,脚本编译断路器限制一段时间内内联脚本编译的数量。

script.max_compilations_rate 
限制在一定的时间间隔内允许编译的唯一动态脚本的数量。默认值为75/5m,即每5分钟75条。

其他资料参考:

https://www.easyice.cn/archives/367

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
近200节课,需要的小伙伴自行百度网盘下载,链接见附件,永久有效。 课程内容介绍 (1)核心知识篇 课程特点 (1)使用最新Elasticsearch 5.2版本讲解,市面上的书籍和视频几乎都停留在2.x版本 (2)深入浅出ES核心工作原理,全部手工画图讲解,完全不同于市面上已有视频的PPT讲解 (3)涵盖Elasticsearch所有核心知识点,系统化,体系完整详细,有一定深度,包括完整Java开发示范 (3-1)全面的知识体系,包括了工作原理,文档管理,索引管理,搜索,聚合分析,分词,数据建模,Java API等知识 (3-2)知识足够深入和细节,完全秒杀市面上已有的书籍和视频,比如index segment merge原理,乐观锁并发控制,索引别名与零停机,相关度评分算法与定制,近似聚合算法,doc values与fielddata机制原理,父子关系数据建模,Java API执行scroll search等各种复杂操作,等等 (4)全程每讲必练,大量的案例实战和上机实验,实战出真知,实战中学知识,没有任何一讲是干讲ppt的 (5)包含一个实战项目,运用学到的知识,开发一个小型门户网站的搜索引擎和数据分析系统,运用ES几乎所有的核心知识,不像市面上的demo项目 (6)课程学完之后,学员可以掌握es所有核心知识点,理解es核心原理,而且能够熟练动手操作所有学到的知识和功能,并且能够掌握ES集群的基本部署,并且基于Java开发一个适用于中小型企业的搜索引擎以及数据分析系统,达到学完即可上手到中小型项目中使用的程度 (2)高手进阶篇 课程特点 (1)使用最新Elasticsearch 5.2版本讲解 (2)包含市面上几乎没有的所有Elasticsearch高级知识点:包含地理位置搜索与聚合分析,term vector,suggester search,搜索模板定制,query执行剖析,数十种最全面的聚合分析,span query,shard分配定制,es插件开发,等等,高级的知识点,这些知识点,市面上已有的书籍或视频几乎都没有 (3)全程每讲必练,大量的案例实战和上机实验 (4)包含一个复杂实战项目,运用学到的知识,开发一个复杂的基于地理位置的智能餐厅app的搜索引擎和数据分析系统,运用ES从核心篇到高级篇的所有高阶知识点 (5)课程学完之后,学员可以掌握es从核心到高阶的所有知识点,掌握完整的有深度的es知识体系,同时能够动手操作所有的知识点和功能,最后通过项目实战,能够在中小型公司中,基于Java开发一个可以基于地理位置进行搜索的高级搜索引擎,以及使用复杂聚合操作进行分析的高级实时数据分析系统 (3)大型集群运维优化篇 课程特点 (1)最全面的Elasticsearch运维、管理、调优、故障处理的知识体系:企业级监控体系的搭建,企业级集群部署,集群日常管理策略,集群版本升级方案,集群基准压测方案,集群数据的备份和恢复,系统核心配置参数,性能调优方案,故障处理方案 (2)全程每讲必练,大量上机实验,所有的运维、管理、部署、优化,全部上机实验 (3)从零开始,逐步搭建出一个大型可扩展、高性能、监控体系完善、管理体系健全的分布式集群 (4)学完课程之后,学员除了可以开发复杂的es搜索/分析系统之外,还可以掌握在任何一个公司里,从零开始搭建一个分布式的大型es集群,并制定完善的监控,运维,管理,优化等方案 (4)大型项目架构篇 课程特点 (1)涵盖Elasticsearch目前最核心的两个应用领域,垂直搜索引擎,实时数据分析 (2)开发出2个企业级的大型复杂项目,是完全真实的大型企业项目,电商搜索引擎,电商实时数据分析平台 (2-1)大型电商搜索引擎,包括了真正复杂的大型企业,大型项目的商业级搜索引擎架构,包括了检索、数据更新、排序、分词、query分析等各个核心模块,同时架构上实现了复杂的缓存机制,热启动机制,防雪崩机制,自动降级高可用机制,等等 (2-2)大型电商实时数据分析平台,完整、复杂而且大型的电商数据分析,包括了完善的数据分析指标体系(运营指标,流量指标,销售转化指标,客户价值指标,商品指标,营销指标,风险控制指标,市场竞争指标),一站式构建出复杂的,企业级的,电商领域数据分析平台 (2-3)之所以要单独拉出一篇做大型项目实战,是因为,之前几篇讲的项目,多是架构较为简单,业务也不复杂的项目,主要适用于中小型公司,而且那两个项目主要是集中在运用ES的技术本身来开发出需要的功能来(搜索/分析)。这一篇讲解的项目,重点是采用大公司的大型复杂项目作为背景,让同学可以掌握基于ES技术的大型项目架构能力,达到架构师的水平。比如说大型电商搜
00、尚硅谷_SpringBoot_源码、课件 1、尚硅谷-SpringBoot高级-缓存-JSR107简介 2、尚硅谷-SpringBoot高级-缓存-Spring缓存抽象简介 3、尚硅谷-SpringBoot高级-缓存-基本环境搭建 4、尚硅谷-SpringBoot高级-缓存-@Cacheable初体验 5、尚硅谷-SpringBoot高级-缓存-缓存工作原理&@Cacheable运行流程 6、尚硅谷-SpringBoot高级-缓存-@Cacheable其他属性 7、尚硅谷-SpringBoot高级-缓存-@CachePut 8、尚硅谷-SpringBoot高级-缓存-@CacheEvict 9、尚硅谷-SpringBoot高级-缓存-@Caching&@CacheConfig 10、尚硅谷-SpringBoot高级-缓存-搭建redis环境&测试 11、尚硅谷-SpringBoot高级-缓存-RedisTemplate&序列化机制 12、尚硅谷-SpringBoot高级-缓存-自定义CacheManager 13、尚硅谷-SpringBoot高级-消息-JMS&AMQP;简介 14、尚硅谷-SpringBoot高级-消息-RabbitMQ基本概念简介 15、尚硅谷-SpringBoot高级-消息-RabbitMQ运行机制 16、尚硅谷-SpringBoot高级-消息-RabbitMQ安装测试 17、尚硅谷-SpringBoot高级-消息-RabbitTemplate发送接受消息&序列化机制 18、尚硅谷-SpringBoot高级-消息-@RabbitListener&@EnableRabbit 19、尚硅谷-SpringBoot高级-消息-AmqpAdmin管理组件的使用 20、尚硅谷-SpringBoot高级-检索-Elasticsearch简介&安装 21、尚硅谷-SpringBoot高级-检索-Elasticsearch快速入门 22、尚硅谷-SpringBoot高级-检索-SpringBoot整合Jest操作ES 23、尚硅谷-SpringBoot高级-检索-整合SpringDataElasticsearch 24、尚硅谷-SpringBoot高级-任务-异步任务 25、尚硅谷-SpringBoot高级-任务-定时任务 26、尚硅谷-SpringBoot高级-任务-邮件任务 27、尚硅谷-SpringBoot高级-安全-测试环境搭建 28、尚硅谷-SpringBoot高级-安全-登录&认证&授权 29、尚硅谷-SpringBoot高级-安全-权限控制&注销 30、尚硅谷-SpringBoot高级-安全-记住我&定制登陆页 31、尚硅谷-SpringBoot高级-分布式-dubbo简介 32、尚硅谷-SpringBoot高级-分布式-docker安装zookeeper 33、尚硅谷-SpringBoot高级-分布式-SpringBoot、Dubbo、Zookeeper整合 34、尚硅谷-SpringBoot高级-分布式-SpringCloud-Eureka注册中心 35、尚硅谷-SpringBoot高级-分布式-服务注册 36、尚硅谷-SpringBoot高级-分布式-服务发现&消费 37、尚硅谷-SpringBoot高级-热部署-devtools开发热部署 38、尚硅谷-SpringBoot高级-监管-监管端点测试 39、尚硅谷-SpringBoot高级-监管-定制端点 40、尚硅谷-SpringBoot高级-监管-自定义HealthIndicator

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值