当前位置: 代码迷 >> 综合 >> Elasticsearch Trying to create too many scroll contexts. Must be less than or equal to 500
  详细解决方案

Elasticsearch Trying to create too many scroll contexts. Must be less than or equal to 500

热度:117   发布时间:2023-09-19 18:19:18.0

背景

elasticsearch7.x 开始加上了软限制,max_open_scroll_context默认为500个,这个参数可以理解为数据库可用活跃连接数

报错是因为虽然scroll id有一个存活时限,过期后会自动被清理,但在高并发情况下还是会有可能达到限制,从而报错

Trying to create too many scroll contexts. Must be less than or equal to 500

可以发送请求来查看es集群的open_context使用情况

[GET] _nodes/stats/indices/search

参数解释

        "search" : {"open_contexts" : 0,         //正在打开的查询上下文个数      "query_total" : 0,           //查询出来的总数据条数  "query_time_in_millis" : 0,  //查询阶段所耗费的时间          "query_current" : 0,         //当前正在查询个数 "fetch_total" : 0,           //Fetch操作的次数"fetch_time_in_millis" : 0,  //Fetch阶段总耗时时间            "fetch_current" : 0,         //正在fetch的次数 "scroll_total" : 0,          //通过scroll api查询数据总条数"scroll_time_in_millis" : 0, //通过scroll api总耗时时间"scroll_current" : 0,        //当前滚动API调用次"suggest_total" : 0,         //通过suggest api获取的推荐总数量"suggest_time_in_millis" : 0,//suggest总耗费时间      "suggest_current" : 0        //正在执行suggest api的个数 },

解决方法

百度到的方法是将这个参数调大

curl -X PUT http://ip:9200/_cluster/settings -H 'Content-Type: application/json' -d'{"persistent" : {"search.max_open_scroll_context": 5000},"transient": {"search.max_open_scroll_context": 5000}
}
'

xpack sql

在使用xpack sql中,如果sql语句查询的结果大于fetch_size,就会生成cursor,其实也就是scroll id

这里将整个流程完整走一遍,cursor较长,这里为了方便观察,简化了长度

  1. 发送请求

restHighLevelClient

        if (searchResponse.getScrollId() != null && !searchResponse.getScrollId().equals("")){ClearScrollRequest clearScrollRequest = new ClearScrollRequest();clearScrollRequest.addScrollId(searchResponse.getScrollId());ClearScrollResponse clearScrollResponse = restHighLevelClient.clearScroll(clearScrollRequest,RequestOptions.DEFAULT);if (!clearScrollResponse.isSucceeded()){logger.info(clearScrollResponse.toString());}}

查询时,每次返回的游标都是一样的,所以只需要最后删除一次就可以 

参考文章:

ES版本升级后出现Trying to create too many scroll contexts. Must be less than or equal to: [500]异常_夜-NULL(zmc)的博客-CSDN博客

  相关解决方案