ElasticSearch之Shard request cache settings

对于查询操作,Elasticsearch提供了缓存特性来暂存结果。
对于相同条件的查询请求,在缓存中的数据失效前,响应后续的查询操作时可以直接从缓存中提取结果,有效降低检索操作的时延,提升检索数据时的体验。
提到缓存相关的特性,即要关注如下几点:

  • 缓存的开关
  • 缓存中的数据哪里来
  • 缓存占用的空间
  • 缓存中数据的老化机制
  • 缓存中的数据规模

缓存的开关

创建索引时,默认启用缓存,但可以在创建参数中将参数index.requests.cache.enable指定为false,从而关闭缓存。
命令样例如下:

curl -X PUT "https://localhost:9200/testindex_003?pretty" -H 'Content-Type: application/json' -d'
{"settings": {"index.requests.cache.enable": false}
}
' --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:ohCxPH=QBE+s5=*lo7F9"

执行结果的样例,如下:

{"acknowledged" : true,"shards_acknowledged" : true,"index" : "testindex_003"
}

检查索引testindex_003的参数,命令样例如下:

curl -X GET "https://localhost:9200/testindex_003/_settings?pretty" --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:ohCxPH=QBE+s5=*lo7F9"

执行结果的样例,如下:

{"testindex_003" : {"settings" : {"index" : {"routing" : {"allocation" : {"include" : {"_tier_preference" : "data_content"}}},"number_of_shards" : "1","provided_name" : "testindex_003","creation_date" : "1702050678193","requests" : {"cache" : {"enable" : "false"}},"number_of_replicas" : "1","uuid" : "9r8VrKdURhqr1XJM8Z9egQ","version" : {"created" : "8500003"}}}}
}

在索引创建完毕之后,可以通过Update index settings API修改开关的状态。
例如刚才在创建索引testindex_003时关闭了缓存,可以通过执行命令手工开启缓存。
命令样例如下:

curl -X PUT "https://localhost:9200/testindex_003/_settings?pretty" -H 'Content-Type: application/json' -d'
{"index.requests.cache.enable": true
}
' --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:ohCxPH=QBE+s5=*lo7F9"

执行结果的样例,如下:

{"acknowledged" : true
}

检查索引testindex_003的参数,命令样例如下:

curl -X GET "https://localhost:9200/testindex_003/_settings?pretty" --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:ohCxPH=QBE+s5=*lo7F9"

执行结果的样例,如下:

{"testindex_003" : {"settings" : {"index" : {"routing" : {"allocation" : {"include" : {"_tier_preference" : "data_content"}}},"number_of_shards" : "1","provided_name" : "testindex_003","creation_date" : "1702050678193","requests" : {"cache" : {"enable" : "true"}},"number_of_replicas" : "1","uuid" : "9r8VrKdURhqr1XJM8Z9egQ","version" : {"created" : "8500003"}}}}
}

执行检索操作时,依据业务要求指定缓存的开关,比如禁止从缓存中提取数据,命令样例如下:

curl -X GET "https://localhost:9200/testindex_003/_search?request_cache=true&pretty" -H 'Content-Type: application/json' -d'
{"size": 0,"aggs": {"popular_colors": {"terms": {"field": "colors"}}}
}
' --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:ohCxPH=QBE+s5=*lo7F9"

缓存中的数据

假定启用了缓存特性,Elasticsearch节点处理检索请求时,执行如下操作:

  • 处理查询请求时,则使用查询条件作为关键字,从缓存中提取数据。
  • 假如可以从缓存中提取到相关记录,则返回这部分记录,本次处理完毕。
  • 假如没有从缓存中提取到相关记录,则执行检索操作。
  • 检索操作完毕,使用查询条件作为关键字,将处理结果缓存至缓存中。
  • 假如缓存空间不足,则使用LRU算法清理缓存中的记录,直至可用空间足够保存刚才的检索结果。
  • 返回检索结果。

上述为检索操作的一般流程,实际的执行流程以Elasticsearch的实现为准。

缓存占用的空间

缓存可占用的空间,默认值为Elasticsearch进程Java堆空间的%1
在节点的配置文件$ES_HOME/config/elasticsearch.yml中指定,配置样例如下:

indices.requests.cache.size: 2%

配置项indices.requests.cache.expire用于指定缓存中数据的生命周期。
考虑到Elasticsearch后台定期执行的Refresh操作会自动清理缓存中的过期数据,因此一般不需要配置indices.requests.cache.expire

清理缓存

手工清理缓存,命令样例如下:

curl -X POST "https://localhost:9200/testindex_001/_cache/clear?request=true&pretty" --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:ohCxPH=QBE+s5=*lo7F9"

执行结果的样例,如下:

{"_shards" : {"total" : 2,"successful" : 1,"failed" : 0}
}

缓存的使用情况

可以使用如下API来获取使用情况。

  • Index stats API
  • Nodes stats API

Index stats API
基于索引的粒度统计缓存的使用情况。

命令样例,如下:

curl -X GET "https://localhost:9200/_stats/request_cache?human&pretty" --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:ohCxPH=QBE+s5=*lo7F9"

执行结果的样例,如下:

{"_shards" : {"total" : 13,"successful" : 5,"failed" : 0},"_all" : {"primaries" : {"request_cache" : {"memory_size" : "0b","memory_size_in_bytes" : 0,"evictions" : 0,"hit_count" : 0,"miss_count" : 0}},"total" : {"request_cache" : {"memory_size" : "0b","memory_size_in_bytes" : 0,"evictions" : 0,"hit_count" : 0,"miss_count" : 0}}},"indices" : {"cloned-testindex_002" : {"uuid" : "Lrz1DOsWRY6OTt0Veawo-w","health" : "yellow","status" : "open","primaries" : {"request_cache" : {"memory_size" : "0b","memory_size_in_bytes" : 0,"evictions" : 0,"hit_count" : 0,"miss_count" : 0}},"total" : {"request_cache" : {"memory_size" : "0b","memory_size_in_bytes" : 0,"evictions" : 0,"hit_count" : 0,"miss_count" : 0}}},"testindex_002" : {"uuid" : "k6twq9y9Qtmcs2AHK-USEQ","health" : "yellow","status" : "open","primaries" : {"request_cache" : {"memory_size" : "0b","memory_size_in_bytes" : 0,"evictions" : 0,"hit_count" : 0,"miss_count" : 0}},"total" : {"request_cache" : {"memory_size" : "0b","memory_size_in_bytes" : 0,"evictions" : 0,"hit_count" : 0,"miss_count" : 0}}},"testindex_001" : {"uuid" : "7iGJRFfxRd2jD3qP-KDRmQ","health" : "yellow","status" : "open","primaries" : {"request_cache" : {"memory_size" : "0b","memory_size_in_bytes" : 0,"evictions" : 0,"hit_count" : 0,"miss_count" : 0}},"total" : {"request_cache" : {"memory_size" : "0b","memory_size_in_bytes" : 0,"evictions" : 0,"hit_count" : 0,"miss_count" : 0}}}}
}

Nodes stats API
基于集群中节点的粒度统计缓存的使用情况。

命令样例,如下:

curl -X GET "https://localhost:9200/_nodes/stats/indices/request_cache?human&pretty" --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:ohCxPH=QBE+s5=*lo7F9"

执行结果的样例,如下:

{"_nodes" : {"total" : 1,"successful" : 1,"failed" : 0},"cluster_name" : "elasticsearch","nodes" : {"aKgBu7LgS9a6iPYH8n2JPw" : {"timestamp" : 1702049373653,"name" : "jackie-ubuntu","transport_address" : "127.0.0.1:9300","host" : "127.0.0.1","ip" : "127.0.0.1:9300","roles" : ["data","data_cold","data_content","data_frozen","data_hot","data_warm","ingest","master","ml","remote_cluster_client","transform"],"attributes" : {"transform.config_version" : "10.0.0","ml.machine_memory" : "4040318976","ml.allocated_processors" : "4","ml.allocated_processors_double" : "4.0","ml.max_jvm_size" : "2021654528","ml.config_version" : "11.0.0","xpack.installed" : "true"},"indices" : {"request_cache" : {"memory_size" : "0b","memory_size_in_bytes" : 0,"evictions" : 0,"hit_count" : 0,"miss_count" : 0}}}}
}

相关资料

  • Shard request cache settings
  • Clear cache API
  • Update index settings API
  • Index stats API
  • Nodes stats API
  • Aggregations
  • Suggesters

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

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

相关文章

SpringBoot项目打成War包部署

简介 一般情况下,在SpringBoot项目开发完成进行服务器部署时,都是打成JAR包进行部署运行的。但是在有些情况下也需要将其打成War包使用Tomcat进行部署。本篇文章就简单介绍一下SpringBoot如何打成War包。 注意: 测试Demo的SpringBoot版本为2…

python selenium chrome114版本之后环境配置和携带缓存打开chrome

尽力局 chrome驱动环境配置chrome打开带缓存设置待缓存打开自动关闭浏览器自动关闭浏览器弹窗 最终代码找资料难啊最终效果代码 依赖包和生成依赖包方法关闭谷歌升级 chrome驱动环境配置 网上找到的资料,我现在安装的是120版本的,这个资料是可行的。比较…

Jetbrains IDEA 2023.3 更新

本心、输入输出、结果 文章目录 Jetbrains IDEA 2023.3 更新前言Jetbrains IDEA 2023.3 主要更新内容功能更新用户体验优化数据库工具花有重开日,人无再少年实践是检验真理的唯一标准Jetbrains IDEA 2023.3 更新 编辑:简简单单 Online zuozuo 地址:https://blog.csdn.net/qq…

mysql分页查询性能测试

测试环境:1.1亿数据,约22GB大小,6核12线程32GBmysql8,ssd硬盘 表为常见的订单表,表中26个字段。 网上传说limit不同的使用方式对性能影响很大,自己也有点好奇,于是直接做个测试。 下面直接展示mysql在进…

【数据库设计和SQL基础语法】--查询数据--排序

一、排序数据 1.1 ORDER BY子句 单列排序 单列排序是通过使用 ORDER BY 子句对查询结果按照单个列进行排序。以下是单列排序的一些示例: 升序排序(默认): SELECT column1, column2, ... FROM your_table_name ORDER BY column_t…

对局域网络中应用了网络变压器 POE供电功能的供电端设备间的连接方法

Hqst华轩盛(石门盈盛)电子导读:一起来了解局域网络中应用了网络变压器 POE供电功能的设备间的来连接方法 POE标准为使用以太网的传输电缆输送直流电到POE兼容的设备定义了两种连接方法: 第一,中间跨接法 一种称作"中间跨接法"( Mid -Span ),使用独立的PoE…

【Pytorch】学习记录分享3——PyTorch 自动微分与线性回归

【【Pytorch】学习记录分享3——PyTorch 自动微分与线性回归 1. autograd 包,自动微分2. 线性模型回归演示3. GPU进行模型训练 小结:只需要将前向传播设置好,调用反向传播接口,即可实现反向传播的链式求导 1. autograd 包&#x…

pytorch环境配置

1.创建环境 conda create --name pytorch python3.11.5 2.激活环境 source activate pytorch 3.添加国内镜像源: conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsin…

jmeter,取“临时重定向的登录接口”响应头中的cookie

1、线程组--创建线程组; 2、线程组--添加--取样器--HTTP请求; 3、Http请求--添加--后置处理器--正则表达式提取器; 4、线程组--添加--监听器--查看结果树; 5、线程组--添加--取样器--调试取样器。 首先理解 自动重定向 与跟随…

智能优化算法应用:基于黏菌算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于黏菌算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于黏菌算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.黏菌算法4.实验参数设定5.算法结果6.参考文献7.MA…

拦截器实现指定的IP白名单进行访问规定的Controller

需求:只允许内网的IP(也就是IP白名单)进行访问VideoController和ImgController,其余的FontController可以随便访问不做限制 总体的项目结构: 1、先写好业务代码三个Controller 访问的路径分别是: /api/…

SQL Server查询计划(Query Plan)——图形查询计划

6.4. 查询计划 与Oracle等其他关系库类似,SQL Server中,查询计划是进行SQL调优的基础,没有拿到SQL语句的查询计划之前,任何人都没办法对其性能方面进行准确的分析和判断,也没办法对相关性能问题进行精准的定位(当然,该过程中,也需要参考SQL语句及其具体数据环境)。所…

android studio 快捷输入模板提示

在Android开发中,我们经常会遇到一些重复性的代码,例如创建一个新的Activity、定义一个Getter方法等。为了提高开发效率,Android Studio提供了Live Templates功能,可以通过简化输入来快速生成这些重复性代码。 按下图提示设置&am…

ElasticSearch之cat shards API

命令样例如下: curl -X GET "https://localhost:9200/_cat/shards?vtrue&pretty" --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:ohCxPHQBEs5*lo7F9"执行结果输出如下: index shard prirep state docs s…

机器人制作开源方案 | 智能助老机器人

作者:刘颖、王浩宇、党玉娟 单位:北京科技大学 指导老师:刘新洋、栗琳 1. 项目背景 1.1 行业背景 随着越来越多的服务机器人进入家庭,应用场景呈现多元化和专业化,机器人产业生态体系正在不断完善,服务…

PyGame字体详解

文章目录 字体初始化获取字体字体对象内置方法 字体初始化 在pygame程序中,第一步势必进行初始化,即调用pygame.init()函数,而此初始化过程,则顺便包含了字体初始化,即默不作声地调用了pygame.font.init()函数。下面通…

安卓开发显示加载中

private ProgressDialog loadobj; // 显示 ProgressDialog loadobj loadobj.show(MainActivity.this, "正在加载", "请稍后..."); // 取消 ProgressDialog loadobj.dismiss();或者 public ProgressDialog progressDialog;public void loading(){// …

从计算机底层深入Golang高并发

从计算机底层深入Golang高并发 1.源码流程架构图 2.源码解读 runtime/proc.go下的newpro() func newproc(fn *funcval) {//计算额外参数的地址argpgp : getg()pc : getcallerpc()//s1使用systemstack调用newproc1 systemstack(func() {newg : newproc1(fn, gp, pc)_p_ : getg…

在云服务器上部署Springboot项目

1.本地项目打包 利用IDEA中的Maven对项目打包。 注意: 1. Springboot项目一般会内置tomcat 2.如果项目有一些外部依赖的jar包(比如opengauss-jdbc-5.0.0.jar),如何把它打包进去? 参考文章 ①引入外部依赖&#x…

Tekton 基于 cronjob 触发流水线

Tekton 基于 cronjob 触发流水线 Tekton EventListener 在8080端口监听事件,kubernetes 原生 cronjob 定时通过curl 命令向 EventListener 发送事件请求,触发tekton流水线执行,实现定时运行tekton pipeline任务。 前置要求: kub…