当前位置: 首页 > news >正文

记一次ElasticSearch参数调优

问题描述

生产环境中的ES在查询大数据量时一直报错

{
	"error": {
		"root_cause": [],
		"type": "search_phase_execution_exception",
		"reason": "",
		"phase": "fetch",
		"grouped": true,
		"failed_shards": [],
		"caused_by": {
			"type": "too_many_buckets_exception",
			"reason": "Trying to create too many buckets. Must be less than or equal to: [65535] but was [65536]. This limit can be set by changing the [search.max_buckets] cluster level setting.",
			"max_buckets": 65535
		}
	},
	"status": 503
}

经过查询,是在聚合查询过程中创建了过多的存储桶,超过了系统的默认值65535

search.max_buckets 参数

官方文档中提到 Search settings

该参数是在单个响应中允许的最大的聚合存储桶数量,默认是65535,尝试返回超过此限制的请求将返回错误,也就是上面的报错。

在ElasticSearch中,桶就是指定聚合的分组,例如:

idnameage
1zhang20
2wang130
3li40
4zhao40
5wang120

假设以ID聚合,就是5个桶;以name聚合,就是4个桶;以age聚合,就是3个桶。这样就可以直观的理解search.max_buckets最大能有几个桶了。

结论

search.max_buckets 参数默认值是65535,所以在某些条件下会创建超出该值的存储桶。

但是在某些场景下为了保证聚合后数据的完整性,可以适当的调整该参数的值。

当我们把这个值由65535调整到700000后,查询就可以正常使用了。

不过,如果数据量巨大,这个参数设置的也巨大,查询时会触发熔断机制甚至是OOM;在这种情况下,可以配合query条件+agg的方式实现查询。

相关文章:

  • c语言笔记 字串串函数---strcat,strncat,strcpy,strncpy
  • 【上市公司文本分析】Python+Pytorch微调BERT预训练模型,使用大语言模型完成文本分类任务——金星晔等(2024)《经济研究》大语言模型方法的复现
  • 基于大语言模型与知识图谱的智能论文生成工具开发构想
  • STM32学习【5】用按键控制LED亮灭(寄存器)以及对位运算的思考
  • LeetCode 2614.对角线上的质数:遍历(质数判断)
  • ★ Linux ★ 进程(上)
  • 深度解析manus:技术原理剖析、开源平替方案架构分析
  • kali破解Pdf/execl/word
  • 汽车一键启动PKE无钥匙系统
  • 使用C++写一个递推计算均方差和标准差的用例
  • 使用pyinstaller打包py文件
  • SQL注入第6关
  • 如何用日事清做研发目标、需求、规划、迭代、Bug、效能、复盘、绩效一站式管理
  • 3月18号
  • 7种数据结构
  • ubuntu安装NVIDIA显卡驱动及CUDA环境
  • 【MySQL】关闭外键约束检查
  • python-leetcode 47.组合总和
  • Redis 面试思路
  • 深度学习-148-langchain之如何使用with_structured_output()从模型中返回结构化数据
  • 特朗普称将禁止伊朗石油买家与美国做生意
  • 夜读丨春天要去动物园
  • 湖北鄂城:相继4所小学有学生腹泻呕吐,供餐企业负责人已被采取强制措施
  • 黄育奇当选福建惠安县人民政府县长
  • 中老铁路跨境国际旅客突破50万人次
  • 2025年“投资新余•上海行”钢铁产业“双招双引”推介会成功举行