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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mybatis的一级缓存和二级缓存

mybatis的一级缓存和二级缓存 mybatis设计两级缓存来提高查询效率。 一级缓存是SqlSession级别,每个会话都需要创建一个sqlsession,避免同一个用户在多次查询中每次都去查询数据库就把查询结果做了缓存 二级缓存 跨SqlSession的缓存,以及缓存…

C#——Delegate(委托)与Event(事件)

C#——Delegate(委托)与Event(事件) 前言一、Delegate(委托)1.是什么?2.怎么用?Example 1:无输入无返回值Example 2:有输入Example 3:有返回值Exa…

抖音外卖商品模型

目录 一、抖音外卖商品模型 二、商家运营流程 (一)商家入驻流程 (二)商品发布流程 三、推广带货流程 (一)短视频带货 (二)直播视频带货 【直播工具】 【直播流程】 直播前…

SQL Server 数据库,创建数据表(使用T-SQL语句)

2.3表的基本概念 表是包含数据库中所有数据的数据库对象。数据在表中的组织方式与在电子表格中相似,都是 按行和列的格式组织的,每行代表一条唯一的记录,每列代表记录中的一个字段.例如,在包含公 司员工信息的表中,每行…

数据结构:图文详解双向链表的各种操作(头插法,尾插法,任意位置插入,查询节点,删除节点,求链表的长度... ...)

目录 一.双向链表的概念 二.双向链表的数据结构 三.双向链表的实现 节点的插入 头插法 尾插法 任意位置插入 节点的删除 删除链表中第一次出现的目标节点 删除链表中所有与关键字相同的节点 节点的查找 链表的清空 链表的长度 四.模拟实现链表的完整代码 前言&am…

初探Java之旅:探寻Java的奥秘

✨个人主页:全栈程序猿的CSDN博客 💨系列专栏:Java从入门到精通 ✌座右铭:编码如诗,Bug似流星,持续追求优雅的代码,解决问题如同星辰般自如 在计算机编程的世界中,有一门被誉为“千变…

位图布隆过滤器(附面试题)

文章目录 目录 文章目录 前言 一 . 位图 1.1 面试题 1.2 位图概念 1.3 位图的实现 1.4 位图的应用 二 . 布隆过滤器 2.1 布隆过滤器提出 2.2布隆过滤器概念 2.3 布隆过滤器的查找 2.4 实现 2.5 布隆过滤器删除 2.6 布隆过滤器优点 2.7 布隆过滤器缺陷 2.8 布隆过滤器使用场景 三…

面试官:说说Vue中Proxy与Object.defineProperty的用法与区别

前言 面试时,我们说完Vue响应式原理,或者Vue2和Vue3的区别时,通常会引出Vue3使用了Proxy来优化响应式,而面试官会继续深挖:说说Proxy与Object.defineProperty的区别。 我们不能只说Proxy直接代理一个对象&#xff0c…

【java毕业设计源码】基于SSM框架的在线智能题库管理系统设计与实现

该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等学习内容。 目录 一、项目介绍: 二、文档学习资料: 三、模块截图: 四、开发技术与运行环境: 五、代码展示: 六、数据库表截图&#xff1a…

【论文阅读 + 核心代码定位解读】(2023 AAAI)HiCLR

Hierarchical Consistent Contrastive Learning for Skeleton-Based Action Recognition with Growing Augmentations Contribution 直接使用 strong augmentations 会导致图片/骨架点序列的结构变形和语义信息损失,从而导致训练过程的不稳定。于是本文提出了一种逐…

Java Servlet

请求 请求行 方式 uri http/1.1 请求头 请求体 form表单标签提交Get请求时,参数以键值对形式放在url后,不放在请求体里,Get方式的请求也是可以有请求体的 Post请求时,放在请求头里面 Servlet (server applet) 是运行在服务端…

curl --compressed报错,此版本不支持此命令

出现这个问题是因为微软windows自带的curl不支持这个选项,验证如下 执行where curl 时,可以看到输出为 C:\Windows\System32\curl.ee 解决方法是使用其它curl,下载地址如下 curl for Windows https://curl.se/windows/ 然后把安装目录的bin目录放到path环境变量里最开始, 让…

基于微信小程序的高校活动系统

1 前言 1.1开发背景及意义 高校课余活动管理是中职学生素质教育的重要途径及有效方式,特别是对于一个院校的校园文化建设、校风学风建设和学生综合素质方面的提高至关重要t叫"。良好的学生活动组织可以更好地调动学生参与活动,让学生展示自己的能力…

理解SpringIOC和DI第一课(Spring的特点),IOC对应五大注解,ApplicationContext vs BeanFactory

Spring是一个包含众多工具等Ioc容器 对象这个词在Spring范围内,称为bean Spring两大核心思想 1.IOC (IOC是控制反转,意思是控制权反转-控制权(正常是谁用这个对象,谁去创建,)-控制对象的控制权&#xf…

十五届海峡两岸电视主持新秀大会竞赛流程

海峡两岸电视主持新秀会是两岸电视媒体共同举办的一项活动,旨在为两岸年轻的电视主持人提供一个展示才华的舞台,促进两岸文化交流和青年交流。本届新秀会是第十二届海峡两岸电视艺术节的重要活动之一。本次竞赛赛制流程如下: (1&…

navicat某些表为什么不按主键排序

不知道大家注没注意过navicat的这种情况 为什么不是按主键排序呢 我们来全表扫描看下他的执行计划 explain select * from orsql3; 可以发现不是全表扫描而是索引树扫描,由此得知了共性,不按主键顺序排序的表,肯定是在二级索引上就保存着全部…

【uni-app】赋予你的APP(Android原生)小程序开发能力

采用DCloud(数字天堂(北京)网络技术有限公司)的uniMPsdk(uni小程序SDK),是为原生App打造的可运行基于 uni-app 开发的小程序前端项目的框架,从而帮助原生App快速获取小程序的能力。 uni-app文档地址(小程序开发人员开发用) uniMP…

SmartsoftHelp8,条形码,二维码 生成,解析 专业工具

生成条形码 生成二维码 条形码解析 二维码解析 专业工具 下载地址: https://pan.baidu.com/s/1zBgeYsqWnSlNgiKPR2lUYg?pwd8888

9、Qt使用随机验证码

一、新建项目 创建一个"Qt Widget Application"项目,基类选择“QMainWindow” 二、自定义CaptchaLabel类 右击项目名,选择"Add New...” C -> CClass,点击“Choose” 更改类名CaptchaLabel,添加基类QLabel&a…

《YOLOv8原创自研》专栏介绍 CSDN独家改进创新实战专栏目录

YOLOv8原创自研 https://blog.csdn.net/m0_63774211/category_12511737.html?spm1001.2014.3001.5482 💡💡💡全网独家首发创新(原创),适合paper !!! 💡&a…