【Elasticsearch管理】缓存机制

文章目录

  • 缓存
    • Field data cache(字段数据缓存)
    • Node query cache(节点查询缓存)
    • Indexing buffer(索引缓冲区)
    • Shard request cache(分片请求缓存)
      • 缓存失败
      • 启用/禁用缓存
      • 根据请求启用/禁用缓存
      • 缓存Key
      • 缓存使用监控
    • 缓存查询
  • 熔断机制
    • Parent circuit breaker(父级断路器)
    • Field data circuit breaker(字段数据断路器)
    • Request circuit breaker(请求断路器)
    • Accounting requests circuit breaker
    • 脚本编译断路器

缓存

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/709111.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

script中的defer和async

在HTML中&#xff0c;<script>标签可以使用async和defer两个属性来控制外部JavaScript文件的加载和执行方式。这两个属性的目的是优化页面加载时间&#xff0c;但它们以不同的方式工作。下面是每个属性的具体说明&#xff1a; async属性 当你给<script>标签添加a…

pwa应用打开自动跳转到某个网页网址,并且全屏不显示网址url,就像这个网页也具备了pwa功能

问题描述 如果是只要在同一个域名下配置了pwa功能,那么当从桌面上打开这个pwa软件时,就会像真正的app运行一样,全屏显示,并且不显示网址的,但是如果要动态配置打开pwa时动态加载不同的网址,使用 window.location.href = “网址”这种形式重定向url就会导致pwa出现地址栏…

淘宝商品详情API:电商竞品分析的重要工具

淘宝商品详情API是淘宝开放平台提供的一种接口&#xff0c;允许开发者获取淘宝商品详情的信息&#xff0c;包括商品标题、价格、销量、评价等。对于电商竞品分析来说&#xff0c;这个API是一个重要的工具&#xff0c;因为它可以帮助分析者快速获取竞品商品的数据&#xff0c;从…

若依springboot接入feign踩坑记录

问题情境&#xff1a; 简单的项目采用了若依的前后端分离版本单体应用&#xff0c;之前采用forest请求调用第三方接口&#xff0c;改为feign接口调用后&#xff0c;引入feign报错 error creating bean with name ‘configurationPropertiesbean’ 解决方案&#xff1a; spri…

【MySQL】基本查询(表的增删改查)-- 详解

CRUD&#xff1a;Create&#xff08;创建&#xff09;&#xff0c;Retrieve&#xff08;读取&#xff09;&#xff0c;Update&#xff08;更新&#xff09;&#xff0c;Delete&#xff08;删除&#xff09;。 一、Create insert [into] table_name [(column [, column] ...)] v…

uniapp:根据环境(开发、测试、生产)选择服务器接口或者业务

一、根据环境&#xff08;开发、测试、生产&#xff09;选择服务器接口或者业务 打开main.js 页面&#xff0c;使用以下代码 const accountInfo wx.getAccountInfoSync(); const envWx accountInfo.miniProgram.envVersion; if (envWx develop) {console.log(开发环境&…

Unity中URP实现水体(水的焦散)

文章目录 前言一、原理1、 通过深度图&#xff0c;得到 对应像素 在 世界空间下的Z值2、得到模型顶点在 观察空间 下的坐标3、由以上两点得到 深度图像素 对应的 xyz 值4、最后&#xff0c;转化到 模型本地空间下&#xff0c;用其对焦散纹理采样 二、实现1、获取深度图2、在顶点…

警惕!2本期刊被剔除!2024年2月Scopus期刊目录已更新!

【SciencePub学术】 ​2024年2月&#xff0c;Scopus数据库迎来本年度第二次更新&#xff01;此次更新后&#xff0c;有94本期刊发生变动&#xff1a; • 剔除&#xff1a;有2本期刊不再被Scopus数据库收录&#xff08;Discontinued titles Jan. 2024&#xff09;&#xff1b; …

【低代码开发_RuoYi_框架】RuoYi框架_前端页面部署/搭建

开源软件的影响力 随着信息技术的快速发展&#xff0c;开源软件已经成为软件开发的趋势&#xff0c;并产生了深远的影响。开源软件的低成本、可协作性和透明度等特点&#xff0c;使得越来越多的企业和个人选择使用开源软件&#xff0c;促进了软件行业的繁荣。然而&#xff0c;…

主流Golang框架对比以及介绍

一.Gin框架 Gin是Golang社区非常受欢迎的一个轻量级框架,它具有简洁易用的特点&#xff0c;并且拥有很好的性能和可扩展性.Gin采用类似MVC的架构&#xff0c;支持中间件、路由、模板渲染等功能&#xff0c;同时也提供了一些强大的插件和工具&#xff0c;例如Swagger、CORS等,还…

在线原型工具有哪些比较好用?

随着云计算和5G网络的发展&#xff0c;互联网办公工具的发展 Web 这是一个不可避免的趋势。那么&#xff0c;对于产品设计团队来说&#xff0c;哪些在线设计工具值得体验呢&#xff1f;今天&#xff0c;让我们来看看一些国内外经典的在线原型工具。 即时设计 - 可实时协作的专…

比特币逼近历史高点,ETF疯了,Coinbase崩了,尼日利亚抓人了

2月28日&#xff0c;比特币冲高回落&#xff0c;加密货币交易所Coinbase则因宕机上演了一波“0元惊魂”。 比特币隔夜美股盘中突然飙高&#xff0c;突破6.4万美元大关&#xff0c;距历史新高仅一步之遥&#xff0c;但随后回落&#xff0c;几分钟之内就跌了5000美元&#xff0c…

2022年上半年教师资格证考试《综合素质》(中学)题

4.某校在初三年级实行两张课程表&#xff0c;一张公开的应对检查&#xff0c;一张不公开的实际执行&#xff0c;以提高升学率。对于该校做法&#xff0c;正确的是&#xff08;C &#xff09;。 A遵循了学科教学的基本规则 B降低了学生学习的效率 C漠视了学生全面发展的需要 …

vue3 + TS + vite 搭建中后台管理系统(开箱即用)

[TOC](vue3 TS vite 搭建中后台管理系统) 开箱即用 前言 要成功&#xff0c;先发疯&#xff0c;头脑简单往前冲&#xff01; 三金四银&#xff0c;金九银十&#xff0c;多学知识&#xff0c;也不能埋头苦干&#xff0c;要成功&#xff0c;先发疯&#xff0c;头脑简单往前冲…

关于前端blob协议下载,wkwebview相关适配整理知识整理

关于前端blob协议下载&#xff0c;wkwebview相关适配整理 如果前端使用的blob协议对目标进行下载&#xff0c;该功能是嵌套在iOS客户端中可以这样做&#xff1a; available(iOS 14.5, *)func webView(_ webView: WKWebView, navigationAction: WKNavigationAction, didBecome …

ElasticSearch安装和kibana控制台安装

文章目录 简介ElasticSearch安装环境下载参数密码配置启动 kibana安装修改config/kibana.yml配置 简介 Elasticsearch 是一个分布式文档存储。Elasticsearch 是存储已序列化为 JSON 文档的复杂数据结构。当集群中有多个 Elasticsearch 节点时&#xff0c;存储的文档分布在整个…

linux系统---nginx(3)核心配置指令及调优

目录 Nginx 核心配置指令 一、Nginx配置文件详解 1、配置文件目录 2、配置文件结构 二、调优 1、在全局域进行的调优 1.1线程池指令 1.2 工作进程数指令 2.1 工作进程并非数指令 2.2 事件处理机制选择指令 2.3 互斥锁指令 3、在http指令域的调优 3.1 Nginx端口监听…

JAVA SE 2.基本语法

1.Java的基本语法 1.Java代码的基本格式修饰符 class 类名{程序代码 } 例: public class Test{public static void main(String[] args){} }语法说明 1.Java程序代码都必须放在类中&#xff0c;类需要用class关键字定义&#xff0c;class前面可以有修饰符2.当类不是定义在java.…

Redis学习------实战篇----2024/02/28

1.集群的session共享问题 2.基于Redis实现共享session登录 //4.保存验证码到redisstringRedisTemplate.opsForValue().set(LOGIN_CODE_KEYphone,code,LOGIN_CODE_TTL, TimeUnit.MINUTES);RedisTemplate RedisTemplate使用的是JdkSerializationRedisSerializer存入数据&#xff…