elasticsearch7.17 terms聚合性能提升90%+

背景

ES7 相比于 ES6 有多个层面的优化,对于开源的ES而言,升级是必经之路。

ES的使用场景非常多,在升级过程中可能会遇到非预期的结果;

比如之前文章提到的典型案例:ES7.17版本terms查询性能问题

ES7.17版本terms查询性能问题_es terms查询慢 profile-CSDN博客

接下来再分析一个升级之后聚合性能下降的case;

场景

1. 按照标准最佳实践进行改造(分片控制在20G左右,term/terms查询使用keyword类型...)

2. 集群从ES6.8.5 升级到 ES7.17.5

3. 异常:升级后性能骤降

avg 100ms -> 400ms

特定聚合查询 400ms -> 1500ms

4. 通过 profile ,以及实际测试,耗时主要是在聚合

分析

1. 性能下降,随之而来的还有CPU升高

2. 通过 arthas 工具采集火焰图

可以看到和global_ordinals全局序数相关;(查询/聚合时临时构建全局序数)

3. 针对全局序数,一般是2种优化手段

方案一:不使用序数 "execution_hint": "map"

注:只有在聚合时基数较小的情况下适用,否则容易OOM;(即字段整体数据基数较小;或者聚合时需要带有查询条件,查询条件筛选后用于聚合的字段数据基数比较小)

"aggregations": {"agg_count": {"terms": {"field": "xxxxID","execution_hint": "map","size": 2,"min_doc_count": 1,"shard_min_doc_count": 0,"show_term_doc_count_error": false,"order": [{"_key": "asc"}]}}}

方案二:在查询之前提前创建好全局序数 "eager_global_ordinals": true,将全局序数的构建转移到索引(写数据)阶段,保证查询的效率

PUT xxxx/_mapping
{"properties": {"xxxxxID":{"type": "keyword","eager_global_ordinals": true}}
}

结论

1. 使用方案一,"execution_hint": "map",性能大幅提升

1600ms -> 10ms (没有pageCache时候是40ms左右)

注:POST xxxx/_cache/clear 只能清理ES本身的缓存,无法清理pageCache

然后check一下terms聚合使用的字段的基数

POST xxxxx/_search
{"query": {"match_all": {}},"size": 0,"aggs": {"count_aggs": {"cardinality": {"field": "xxxxID"}}}
}

整个索引,该字段的基数为 8kw,如果聚合不带任何条件就会消耗大量内存;

如果聚合都带查询条件,那么该方案适用,并且性能提升 90%+;

2. 方案二需要重建索引,理论查询性能也会大幅提升,此处暂无测试数据

PUT xxxx/_mapping
{"properties": {"xxxxxID":{"type": "keyword","eager_global_ordinals": true}}
}

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

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

相关文章

【Python笔记-FastAPI】后台任务+WebSocket监控进度

目录 一、代码示例 二、执行说明 (一) 调用任务执行接口 (二) 监控任务进度 实现功能: 注册后台任务(如:邮件发送、文件处理等异步场景,不影响接口返回)监控后台任务执行进度(进度条功能)支…

常见的几种httpclient

工作是spring 项目一般都是使用ResTemplate 但是还是有些项目中会用到httpClient&#xff0c;没有毛用。 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> …

pclpy 点云法线

pclpy 点云法线 一、算法原理1.理论入门2.选择正确的比例 二、代码三、结果四、相关数据 一、算法原理 表面法线是几何表面的重要属性&#xff0c;在许多领域&#xff08;例如计算机图形应用程序&#xff09;中大量使用&#xff0c;以应用正确的光源来生成阴影和其他视觉效果。…

缓存穿透--一起学习吧之架构

缓存穿透是指查询一个一定不存在的数据&#xff0c;由于缓存是不命中时需要从数据库查询&#xff0c;查不到数据则不写入缓存&#xff0c;这将导致这个不存在的数据每次请求都要到数据库去查询&#xff0c;进而给数据库带来压力。在高并发场景下&#xff0c;如果某个key被高并发…

Android 混淆是啥玩意儿?

什么是混淆 Android混淆&#xff0c;是伴随着Android系统的流行而产生的一种Android APP保护技术&#xff0c;用于保护APP不被破解和逆向分析。简单的说&#xff0c;就是将原本正常的项目文件&#xff0c;对其类、方法、字段&#xff0c;重新命名a,b,c…之类的字母&#xff0c…

森林灭火利器|便携式森林消防灭火泵|恒峰智慧科技

随着人们对环境保护意识的不断提高&#xff0c;森林防火工作显得尤为重要。然而&#xff0c;传统的森林灭火方式存在诸多不便&#xff0c;如火势蔓延迅速、灭火效率低下等。为了更好地保护森林资源&#xff0c;科学家们研发出了一种便携式森林消防灭火泵&#xff0c;它的出现为…

利用css实现常见图形

1、正圆形 给正方形盒子设置圆角属性为宽高的50%。 div {width: 100px;height: 100px;background-color: plum;border-radius: 50%; } 2、胶囊形 给长方形盒子设置圆角属性为盒子高度的50%。 div {width: 200px;height: 100px;background-color: plum;border-radius: 50px…

基于C#开发OPC DA客户端——基于OPCDAAuto

OPC DA OPC DA(OPC Data Access)&#xff0c;即OPC数据访问接口&#xff0c;定义了数据交换的规范&#xff0c;包括&#xff1a;过程值、更新时间、数据品质等信息。 自动化接口中共定义了6类对象&#xff1a;OPCServer对象、OPCBrowser对象、OPCGroups对象、OPCGroup对象、O…

steloj勒索病毒:[steloj@mailfence.com].steloj袭击了您的计算机?

引言&#xff1a; 在数字时代&#xff0c;我们的数据是我们最宝贵的资产之一。然而&#xff0c;随着科技的进步&#xff0c;网络犯罪也在不断演变。最新的威胁之一就是.[stelojmailfence.com].steloj勒索病毒。这种恶意软件不仅能够加密你的数据&#xff0c;而且还会要求赎金以…

C++11之字符串与数值之间的转换

C11之字符串与数值之间的转换 数值转换为字符串字符串转换为数值 在C11中提供了专门的类型转换函数&#xff0c;程序猿可以非常方便的使用它们进行数值类型和字符串类型之间的转换。 数值转换为字符串 使用to_string()方法可以非常方便地将各种数值类型转换为字符串类型&#…

如何做代币分析:以 SHIB 币为例

作者&#xff1a;lesleyfootprint.network 编译&#xff1a;cicifootprint.network 数据源&#xff1a;SHIB Token Dashboard &#xff08;仅包括以太坊数据&#xff09; 在加密货币和数字资产领域&#xff0c;代币分析起着至关重要的作用。代币分析指的是深入研究与代币相关…

贪心算法 —— 字典序删除字符

题目描述 给定一个单词&#xff0c;请问在单词删除t个字母之后&#xff0c;能得到的字典序最小的单词是什么&#xff1f; 输入描述 输入的第一行包含一个单词&#xff0c;有大写英文字母组成 第二行包含一个正整数t 其中&#xff0c;单词长度不超过100&#xff0c;t小于单…

qt学习:串口调试助手

目录 步骤 配置ui界面 注意 新建一个自定义复选框类MyComboBox,并继承自带的复选框类 重写一个鼠标左键按下事件,按下就发送信号 定义一个信号 本身ui界面类.h 添加头函数 定义成员数据和成员函数(槽函数) 本身ui界面类.cpp 构造函数 发送数据槽函数 接收数据…

3、Redis-List【常用】

目录 一、重要特点 二、常用命令 三、Redis中List类型应用场景 一、重要特点 ①Redis中的List&#xff0c;视为双向链表 ②Redis中的List&#xff0c;数据可以重复 二、常用命令 常用命令 格式含义例子rpush key value从右边往key中添加value值rpush hobby java pythonlpu…

保姆教程 Docker 部署微服务项目

大家好&#xff0c;我是奇兵。 文章比较长&#xff0c;请耐心看完&#xff01; 项目上线是每位学编程同学必须掌握的基本技能。之前我已经给大家分享过很多种上线单体项目的方法了&#xff0c;今天再出一期微服务项目的部署教程&#xff0c;用一种最简单的方法&#xff0c;带…

备战蓝桥杯Day18 - 双链表

一、每日一题 蓝桥杯真题之工作时长 这个题写代码做的话很麻烦&#xff0c;而且我也不一定能写出来&#xff0c;所以我直接就是用的excel来计算的时间和。 使用excel的做法 1.先把文件中的时间复制到excel中。 2.把日期和时间分到两列。 分成两列的步骤&#xff1a; 选中要…

基于单片机的节能窗控制系统设计

摘 要:本文以单片机为基础,对节能窗控制系统进行了科学设计,在满足日常生活需求的同时更好地实现节能减排目标。此设计中的节能窗控制系统,实际操作要灵活,具备可靠且稳定的性能,同时具备节能功效。 关键词:单片机;节能窗控制系统;系统设计 在节能窗等概念推广的背景…

css实现一行靠右,多行靠左

利用 inline-block 可以根据内容宽度变化的特性 如果内容多到折行了&#xff0c;那自身的宽度会和父级同宽&#xff0c;同宽后&#xff0c;产生折行&#xff0c;这时候就生效了… <!DOCTYPE html> <html lang"en"> <head><meta charset"U…

Atcoder ABC342 E - Last Train

Last Train&#xff08;最后一班火车&#xff09; 时间限制&#xff1a;2s 内存限制&#xff1a;1024MB 【原题地址】 所有图片源自Atcoder&#xff0c;题目译文源自脚本Atcoder Better! 点击此处跳转至原题 【问题描述】 【输入格式】 【输出格式】 【样例1】 【样例输入…

2. this 指向问题

this 指向问题 前言 当一个函数调用时&#xff0c;会创建一个执行上下文&#xff0c;这个上下文包括函数调用的一些信息(调用栈&#xff0c;传入参数&#xff0c;调用方式)&#xff0c;this就指向这个执行上下文。 this 不是静态的&#xff0c;也并不是在编写的时候绑定的&am…