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

记一次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的方式实现查询。


http://www.kler.cn/a/591202.html

相关文章:

  • Bash环境定制git分支提示符暨JDK版本切换脚本
  • C 语言格式化输入输出详解
  • 译:《Converting a Hugging Face Model to a GGUF Model》转化HuggingFace原生模型为GGUF格式
  • autosar功能安全文档解析
  • 【极光 Orbit·STC8AH】04. 深度探索 GPIO 底层逻辑
  • Redis之单线程与多线程
  • 【leetcode hot 100 124】二叉树中的最大路径和
  • 【Linux网络编程】I/O模型
  • DeepSeek 3FS集群化部署临时笔记
  • 素数判定方法详解:从基础试除法到优化策略
  • TDE透明加密:重塑文件传输与网盘存储的安全新范式
  • 生信分析服务作图TCGA/GEO数据库挖掘细胞测序转录学代做指导辅导
  • Scrapy爬虫实战:动态代理破解链家反爬机制的详细步骤
  • 面试经典问题(持续更新)
  • C++编译汇编八股总结
  • 味觉传送器E-Taste:开启虚拟世界的味觉之门
  • 【NoSql】Redis
  • 护网面试题
  • HOVER:人形机器人的多功能神经网络全身控制器
  • JavaScript变量声明与DOM操作指南