Elasticsearch:UpdateByQuery_update Trying to create too many scroll contexts

在生产环境中,忽然客户现场执行数据修改,出现无法成功的问题,开始以为是调用接口出现异常,通过监控发现实际为调用es出现了异常:update Trying to create too many scroll contexts

image.png

Trying to create too many scroll contexts. Must be less than or equal to: [2012345678]. This limit can be set by changing the [search.max_open_scroll_context] setting.

执行的sql

POST intrusion_att_cks.new.pro.xxxxxx/_update_by_query
{
  "script": {
    "source": "ctx._source.current_state=params.current_state; ctx._source.disposal_at=params.disposal_at;",
    "params": {
      "current_state": 13,
      "disposal_at": "2023-12-26T12:00:00"
    },
    "lang": "painless"
  },
  "query": {
    "bool": {
      "must": [
        {
          "terms": {
            "_id": [
              "11111111"
            ]
          }
        }
      ]
    }
  }
}

问题定位

  1. 开始以为是确实在使用过程中未对scroll进行有效回收出现导致的,通过一下命令可以进行查看当前是否存在已经打开了的scroll,但是未进行有效关闭的:

GET /_nodes/stats/indices/search
image.png
重点关注这两个参数是否存在大于0的情况,如果是有的话,代码中可能还是会存在未进行有效关闭scroll
此时查看我的实际是没有这种情况的,但是还是会抛出异常

  1. 查看是否max_open_scroll_context 设置的过小导致的,通过以下命令进行查看具体的设置

GET /_cluster/settings

{
  "persistent" : {
    "search" : {
      "max_open_scroll_context" : "2012345678"
    }
  },
  "transient" : {
    "search" : {
      "max_open_scroll_context" : "2012345678"
    }
  }
}

发现其值大小也比较大,正常的update也不会出现这个问题,排除此问题

  1. 尝试是否是当前index的配置存在了什么问题,而导致出现异常,但是使用其他index进行修改,同样也是会出现这个错误(因为是生产,处理还是需要谨慎),排除此问题

问题解决

最后通过百度查找看是否存在有同类型的问题,但是大部分的都是以修改数量来进行解决,但是由于是生产,而且我们的现象表现的并没有占用,所以还是想要知道最终的问题是在哪里。
后面在elasticsearch的官方iuss中找到了遇到相同的问题,发现当前实际在6.9版本时候已经出现该bug,但是一直到7.7之后才修复完成,立马我这边查看我的es版本,发现果然是7.6.2的版本,而且大部分遇到该问题的用户也都是使用的7.6.2的版本出现的。

使用以下命令查看当前版本

GET /

{
  "name" : "es-03",
  "cluster_name" : "prod-escluster",
  "cluster_uuid" : "RMgBIu7nTHaRDv3c8mNrEw",
  "version" : {
    "number" : "7.6.2",
    "build_flavor" : "de1fault",
    "build_type" : "tar",
    "build_hash" : "e132eb35cf30adf4db14086e8aabd07ef6fb113f",
    "build_date" : "2020-03-26T06:34:37.794943Z",
    "build_snapshot" : false,
    "lucene_version" : "8.4.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

github issues地址:https://github.com/elastic/elasticsearch/issues/71618

解决方案
  1. 升级到7.7以后版本可以彻底解决
  2. 临时调整max_open_scroll_context大小
# 使用该调整大小
PUT /_cluster/settings
{
  "persistent": {
    "search.max_open_scroll_context": 2152345678
  },
  "transient": {
    "search.max_open_scroll_context": 2152345678
  }
}
 
  1. issues中有提到可以重启es解决,临时解决(未验证)

image.png
胡乱猜想:有可能是该数量在代码中也存在计数,然后在判断的过程中直接使用内存中的数据做了处理,提现可能就是在业务量不大的情况或者以及数据量不大的情况下,前期比较难以提现处理,毕竟目前我的配置是20亿的数据,也算不能轻易到达,然后重启之后可能存在将计数进行重置,所以有能够继续使用,未看实际提交的代码,所以仅个人猜想。

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值