ES max_compilations_rate 参数设置问题导致的查询bug

wylc123 4月前 ⋅ 490 阅读

报错内容:

"{\n \"error\": {\n \"reason\": \"Error occurred in OpenSearch engine: all shards failed\",\n \"details\": \"Shard[0]: [ekr_ccnd_org_publish_stat/1BuTmQvzT2i_oN_NKlr4rg] QueryShardException[failed to create query: Failed to compile inline script [rO0ABXNyADRvcmcub3BlbnNlYXJjaC5zcWwuZXhwcmVzc2lvbi5mdW5jdGlvbi5GdW5jdGlvbkRTTCQyPc501CEBPWwCAAVMAA12YWwkYXJnd............b25lSWQ7TAAKbm93SW5zdGFudHQAE0xqYXZhL3RpbWUvSW5zdGFudDt4cHNyAA1qYXZhLnRpbWUuU2VylV2EuhsiSLIMAAB4cHcQBwANQXNpYS9TaGFuZ2hhaXhzcQB+AE13DQIAAAAAZUM+6QJdLPJ4fnEAfgAZdAAHQk9PTEVBTg==] using lang [opensearch_query_expression]]; nested: CircuitBreakingException[[script] Too many dynamic script compilations within, max: [75/5m]; please use indexed, or scripts with parameters instead; this limit can be changed by the [script.context.filter.max_compilations_rate] setting];\\n\\nFor more details, please send request for Json format to see the raw response from OpenSearch engine.\",\n \"type\": \"SearchPhaseExecutionException\"\n },\n \"status\": 400\n}"

ChatGTP给出解决方法:

根据你提供的信息,错误消息显示发生了断路器异常(CircuitBreakingException),提示进行了太多的动态脚本编译操作。
错误信息还指出,可以通过使用索引或带参数的脚本来避免这个问题,
并且可以通过设置 [script.context.filter.max_compilations_rate] 
来更改此限制。

这个错误通常发生在使用大量动态脚本编译操作时,超出了OpenSearch的默认限制。为了解决这个问题,你可以尝试以下步骤:

查看脚本编译限制:检查OpenSearch配置中的 [script.context.filter.max_compilations_rate] 参数的设置。
该参数控制了允许的动态脚本编译速率。你可以尝试增加该值,以容纳更多的动态脚本编译操作。注意,更改此配置可能会增加系统资源的使用。

优化脚本使用:避免使用大量的重复动态脚本编译操作。尽量使用已经编译过的脚本或使用带参数的脚本,以减少编译次数。

使用已编译的脚本:如果可能的话,将动态脚本转换为静态脚本,然后将其上传到OpenSearch,以便可以直接使用而无需进行动态编译。

调整脚本使用方式:根据你的具体需求,考虑修改脚本的使用方式,以减少对动态脚本编译的需求。

如果问题仍然存在,建议联系OpenSearch的技术支持或相关的专业人员,以获取更进一步的帮助和支持。提供详细的错误信息和相关配置信息可能有助于更精确地定位问题。

解决方法,将max_compilations_rate参数调大

查看参数值:

GET _cluster/settings?include_defaults=true

设置参数:

PUT _cluster/settings
{
  "persistent": {
    "script.context.filter.max_compilations_rate": "2000/10m"
  }
}

 


相关文章推荐

全部评论: 0

    我有话说: