Elasticsearch 优化查询中获取字段内容的方式,性能提升5倍!

1、背景

集群配置为:8 个 node 节点,16 核 32G,索引 4 分片 1 副本。应用程序的查询逻辑是按经纬度排序后找前 200 条文档。

  • 1、应用对查询要求比较高,search 没有慢查询的状态。

83937ecde9c0d2efc761ab4ec168d1a7.png
  • 2、集群压测性能不能上去,cpu 使用未打满,查询的 qps 上不去,且有队列堆积。

4d6b78f30b8036cf426919ab27d4e95e.png 8437435a4e2552e92b7b629c639958ff.png e4b2443d32b826e8234f235e4651c2ff.png

2、优化方法

通过云厂商内核组的同学抓取火焰图发现,主要消耗在 fetch phrase 阶段。

12678e46b7d1c6585f4818a77085b6b8.png

ES 默认从_source 取,每次查询都会读取一行数据,并需要做解压,如果对查询耗时要求比较高,应当在查询时关闭 store fields ,查询语句 指定“stored_fields”: [“none”], 砍掉元数据字段,同时用 “docvalue_fields”: [“video_fact_id”], 指定只拉取需要的字段,降低序列化跟网络传输开销。约能提升40% 性能。

推荐DSL如下:

GET /your_index/_search{"query": {"match_all": {} // 或者是其他符合你需求的查询},"stored_fields": ["none"], // 不获取任何存储的字段"docvalue_fields": ["field1", "field2"] // 只获取需要的doc value字段}

3、优化后效率

3.1 查询耗时有进一步的提升

225e8f3f5278072c2eabdaa853138a7e.png

3.2 压测时cpu使用率和qps也有了明显的上升

1a963f02d361551860aeafa16fc279f9.png 49d9ddd182f6325cdd8f33e7c3606924.png

压测最终的指标:优化前1800qps,优化后9200qps。

4、优化根因分析

在优化前,由于Elasticsearch默认从_source字段读取数据,这导致每次查询都需要读取整行数据并进行解压。这个过程不仅耗费CPU资源,还会增加响应时间,特别是当文档内容庞大时。

解压操作是CPU密集型的,而在高负载情况下,这可能成为系统瓶颈,从而限制了查询性能和吞吐量。

优化后,通过指定“stored_fields": ["none"],我们有效地排除了_source字段的读取和解压过程,这显著减少了每个查询的CPU负载。

而使用“docvalue_fields”指定从列存中获取字段内容,没有压缩的转换,进一步减少了数据处理的开销。这种方法不仅降低了CPU的使用率,同时只提取必要的字段也减少了了网络传输的负担。

最终,通过这些优化措施,查询的QPS(每秒查询数)得到了显著提升,从1800qps提高到9200qps,这在高性能应用场景中是一个巨大的飞跃。

更高的QPS意味着系统能够更快地处理更多的查询请求,提高了整体的吞吐量和性能。

5、小结

总结来说,通过精细地调整查询策略和减少不必要的数据处理,我们可以显著提升Elasticsearch的性能,这在处理大规模数据和高并发查询的环境下尤为重要。

6、官方文档

https://www.elastic.co/guide/en/elasticsearch/reference/8.4/search-fields.html#disable-stored-fields

https://www.elastic.co/guide/en/elasticsearch/reference/8.4/search-fields.html#docvalue-fields

5、作者介绍

金多安,Elastic 认证专家,Elastic资深运维工程师,死磕Elasticsearch知识星球嘉宾,星球Top活跃技术专家,搜索客社区日报责任编辑

推荐阅读

  1. 全网首发!从 0 到 1 Elasticsearch 8.X 通关视频

  2. 重磅 | 死磕 Elasticsearch 8.X 方法论认知清单

  3. 如何系统的学习 Elasticsearch ?

  4. 2023,做点事

bbc01a0d6562b226156fce7b2e59d7bd.jpeg

更短时间更快习得更多干货!

和全球 近2000+ Elastic 爱好者一起精进!

27eb53c3fb4c0305a1192e32e356fa04.gif

比同事抢先一步学习进阶干货!

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

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

相关文章

Nat. Rev. Chem. | 一份关于用机器学习研究化学问题的评估指导

今天为大家介绍的是来自Tiago Rodrigues团队的一篇论文。机器学习(ML)有望解决化学领域的重大挑战。尽管ML工作流程的适用性极广,但人们通常发现评估研究设计多种多样。目前评估技术和指标的异质性导致难以(或不可能)比…

java设计模式学习之【单例模式】

文章目录 引言单例模式简介定义与用途实现方式:饿汉式懒汉式 UML 使用场景优势与劣势单例模式在spring中的应用饿汉式实现懒汉式实现数据库连接示例代码地址 引言 单例模式是一种常用的设计模式,用于确保在一个程序中一个类只有一个实例,并且…

计算机组成学习-数据的表示和运算总结

1、进制与编码 1.1 进位计数法 常用的进位计数法有十进制、二进制、八进制、十六进制等。十六进制每个 数位可取0〜9、A、B、C、D、E、F中的任意一个,其中A、B、C、D、E、F分别表示 10〜15。 八进制数字通常以前缀 "0"(零)加上数…

Ubuntu 2204 安装libimobiledevice

libimobiledevice是一个开源的软件,它可以直接使用系统原生协议和IOS设备进行通信,类似iMazing,iTunes,libimobiledevice不依赖IOS的私有库,并且连接IOS设备时用的都是原生协议,IOS无需越狱就能实现设备信息…

同旺科技 USB TO SPI / I2C --- 调试W5500_读写网关地址

所需设备: 内附链接 1、USB转SPI_I2C适配器(专业版); 首先,连接W5500模块与同旺科技USB TO SPI / I2C适配器,如下图: 这里的网关地址设置为192.168.1.1 先将网关地址写入寄存器,然后再读取出来:

Echarts 设备状态 甘特图

在做工厂智能化生产看板时,绝对会有设备状态看板,展示设备当天或者当前状态,设备状态数据一般是有mes 系统设备管理模块对设备信息进行采集,一般包括过站数据,设备当前状态,是否在线是否故障、检修、待生产…

Linux CentOS7 联网配置 | 安装中文输入法

参考视频:保姆式教学虚拟机联网liunx(centos)_哔哩哔哩_bilibili 配置网络:解决上网问题 第一步:选择网络模式 第二步:配置网卡命令:打开终端执行命令: 1、先切换到根目录下,防止在第执行cd …

css如何设置文本添加下划线

css文本添加下划线 text-decoration: underline;text-decoration相关属性参数 参数描述none默认。定义标准的文本。underline定义文本下的一条线。overline定义文本上的一条线。line-through定义穿过文本下的一条线。blink定义闪烁的文本。inherit规定应该从父元素继承 text-…

blue beacon rssi 指纹室内定位数据集

数据集是开展实验的基础,搜集并分享。如果你有关于室内定位的问题,请联系博主。 namedatesetpapercommentBLEBeacon: A Real-Subject Trial Dataset from Mobile Bluetooth Low Energy Beaconshttps://github.com/dimisik/BLEBeacon-Datasethttps://arxi…

matlab基于线性二次调节器(LQR)法实现机器人路径规划可变轨迹跟踪

1、内容简介 略 可以交流、咨询、答疑 2、内容说明 基于线性二次调节器(LQR)法实现机器人路径规划可变轨迹跟踪 3、仿真分析 略 load path.mat %% 轨迹处理 % 定义参考轨迹 refPos_x path(:,1); refPos_y path(:,2); refPos [refPos_x, refPos_y];% 计算航向角和曲率 …

Elasticsearch:ES|QL 函数及操作符

如果你对 ES|QL 还不是很熟悉的话,请阅读之前的文章 “Elasticsearch:ES|QL 查询语言简介​​​​​​​”。ES|QL 提供了一整套用于处理数据的函数和运算符。 功能分为以下几类: 目录 ES|QL 聚合函数 AVG COUNT COUNT_DISTINCT 计数为近…

G1264 0.85 V 启动,12uA,同步 DC/DC 变换器

G1264 0.85 V 启动,12uA,同步 DC/DC 变换器 概述: G1264集成 PFM 模式同步升压变换器,只需要一个电感和两个电容。由于升压专有设计,它启动在非常低的输入电压下降到850毫伏,使其成为单电池碱性/镍氢电池操…

Flink Flink中的合流

一、Flink中的基本合流操作 在实际应用中,我们经常会遇到来源不同的多条流,需要将它们的数据进行联合处理。所以 Flink 中合流的操作会更加普遍,对应的 API 也更加丰富。 二、联合(Union) 最简单的合流操作&#xf…

深入Android S (12.0) 探索Framework之输入系统IMS的构成与启动

文章目录 前言一、输入系统的基本组成部分二、输入系统相关源码分析1、IMS 构建1.1、SystemServer # startOtherServices()1.2、InputManagerService1.3、NativeInputManager # nativeInit()1.4、NativeInputManager1.5、InputManager1.6、InputDispatcher1.7、InputReader1.8、…

io基础入门

压缩的封装 参考:https://blog.csdn.net/qq_29897369/article/details/120407125?utm_mediumdistribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-120407125-blog-120163063.235v38pc_relevant_sort_base3&spm1001.2101.3001.…

6 新建工程——寄存器

文章目录 6.1 本地新建工程文件夹6.2 新建工程6.2.1 选择CPU型号6.2.2 在线添加库文件6.2.3 添加文件6.2.4 复制存储器分配文件6.2.5 配置选项卡6.2.5.1 Linker6.2.5.2 Target6.2.5.3 Output 选项卡6.2.5.4 Listing 选项卡6.2.6 下载器配置 版本说明:MDK5.24 6.1 本…

数据结构(三)——算法和算法分析

😀前言 数据结构和算法是计算机科学领域中至关重要的概念。它们为解决实际问题提供了有效的方法和步骤。算法作为解决问题的方法和步骤,在计算机中以指令的有限序列的形式表达。本文将介绍算法的定义、描述和程序设计等方面的内容,帮助您深入…

【Redisson】基于自定义注解的Redisson分布式锁实现

前言 在项目中,经常需要使用Redisson分布式锁来保证并发操作的安全性。在未引入基于注解的分布式锁之前,我们需要手动编写获取锁、判断锁、释放锁的逻辑,导致代码重复且冗长。为了简化这一过程,我们引入了基于注解的分布式锁&…

目标检测——Faster R-CNN算法解读

论文:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks 作者:Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun 链接:https://arxiv.org/abs/1506.01497 代码:https://github.com/rbgirsh…

sqli-labs靶场详解(less17-less22)

目录 less-17 less-18 less-19 less-20 less-21 less-22 less-17 修改密码关卡 服务器后端 账号密码都存在数据库中 使用UPDATE进行修改密码 尝试username处 尝试好久尝试不出来应该是对用户名进行了过滤 于是对password进行注入 判断注入点 passwdadmin 报错&#xff1a…