本文介绍使用Elasticsearch Serverless服务时,可能遇到的高频问题。
报错问题一
-
报错内容:
"app storage exceed limit, app current size: xx GB app limit size: yy GB refer to: MAX_STORAGE_PER_CU and maxCu" -
报错原因:当前App的存储容量已经达到上限。
-
解决方案:
-
调整CU上限(MaxCU)会自动放宽存储容量。默认每 CU 对应存储容量上限为 50 GB(max_storage_per_cu),例如 2 CU 应用存储容量上限默认 100 GB。
-
调整 max_storage_per_cu 可调整上述每 CU 对应的存储容量上限。
说明调大 max_storage_per_cu 的值会导致查询和写入性能下降,请谨慎调整。
-
报错问题二
-
报错内容:
"index storage exceed limit, index current size: xx GB index limit size: yy GB refer to: index storage" -
报错原因:当前索引的存储容量已经达到上限。
-
解决方案:
-
可调整索引存储大小来放宽存储容量限制。
-
可调整MAX_STORAGE_PER_INDEX并新建索引。
说明-
对于读多写少的场景,推荐调整MAX_STORAGE_PER_INDEX并新建索引,使用别名关联旧索引,将数据写入到新索引中。
-
MAX_STORAGE_PER_INDEX仅对新建索引生效。
-
-
报错问题三
-
报错内容:查询时报错
too_many_clauses或提示maxClauseCount/max_terms_count超限。 -
报错原因:ES Serverless 不支持调大
maxClauseCount和max_terms_count参数,两者的最大限制均为 1024。当查询中 Bool Query 的 should 子句数量或 terms 查询的词项数量超过该限制时,会触发此报错。 -
解决方案:
可通过以下方式优化查询逻辑,避免超限:
-
方案一:使用 terms 查询替代 bool should 子句
将循环构建的
bool should子句替换为terms查询。terms查询在 Lucene 层面通常只算 1 个子句,默认上限为 65,536 个值,远高于maxClauseCount的 1024 限制。示例:{ "terms": { "key.keyword": ["value1", "value2", "value3"] } } -
方案二:拆分查询
将庞大的词项数组切分为多个小数组(每组不超过 1024 个词项),通过 Bool Query 的
should子句组合多个子查询的结果。 -
方案三:使用 Terms Lookup 机制
从另一个索引的文档中提取字段值作为查询条件,避免在请求中硬编码传递大数组。
若业务场景必须调大
maxClauseCount或max_terms_count的限制,建议迁移至 ES PaaS 版本,PaaS 版本支持自定义调整这些参数。 -
报错问题四
-
报错内容:查询请求返回 HTTP
429(Too Many Requests),提示MAX_CONCURRENT_SEARCH超限,或返回如下限流信息。limited by {限制项}(xxxxxx_xxxxxxx) threshold:[{限流值}] -
报错原因:客户端同时发起的搜索请求数超过了应用的查询并发度限制
max_concurrent_search(入门版默认值为 5,企业版存在该限制但不展示在控制台),超出上限的请求会被限流。说明max_concurrent_search不展示在服务配额页面,也无法在控制台提交修改限制值的申请。各限制项的默认值请参见应用配额与服务限制文档。 -
解决方案:
-
降低客户端的并发请求数量,并确保客户端具备请求重试机制。重试时应采用指数退避策略(以逐渐延长的间隔重试请求),避免瞬时重试进一步加剧限流。
-
合并小查询,使用
_msearch批量接口替代多次单独查询,减少并发请求数。 -
优化长耗时查询,缩短单次请求的占用时间,减少并发堆积。
-
评估是否提高 CU 弹性区间(
quota_CU_range):CU 决定了应用可承接的 QPS 与并发查询能力,突发流量场景建议适当调高 CU 弹性区间的下限以预留资源。 -
若业务并发确实需要更高的上限,请提交工单评估。
说明提高并发上限不一定能改善整体吞吐,建议先确认单次查询的耗时是否已优化。
-
常见问题一
-
问题描述:如何在 ES Serverless 的 Kibana 中添加自定义用户?为什么在 Stack Management 中看不到 Security 菜单?
-
解决方案:
添加自定义用户
-
登录 Kibana,在左侧导航栏进入 Stack Management > Security > Roles。
-
单击创建角色,配置所需权限(如
manage、kibana_system等)。 -
进入 Stack Management > Security > Users 页面,单击创建用户。
-
填写用户名和密码,并绑定步骤 2 中创建的角色。
如果在 Stack Management 中看不到 Security 菜单,或菜单下的功能被禁用,说明当前登录账号的权限不足。请使用创建应用时设置的管理员账号登录 Kibana,该账号具备创建 Role 和 User 的管理权限。
-
常见问题二
-
问题描述:在 ES Serverless 中创建索引时,出现
ElasticsearchWarning: current index has max storage limit which can be confirmed in aliyun console告警,是否影响使用? -
问题原因:该告警为预期行为,不影响索引创建和使用。ES Serverless 对每个索引设置存储上限,创建索引时系统会返回此告警提示当前索引存在最大存储限制。索引仍会正常创建,可通过
_cat/indicesAPI 确认索引状态为green。 -
存储上限说明:ES Serverless 按分片设置存储上限。单个分片默认存储上限为 20 GB(
max_storage_per_shard),单索引存储上限 = 主分片数 × max_storage_per_shard。需要更大的单索引存储时,可增加主分片数,或调大 max_storage_per_shard(调大分片存储上限会影响读写性能)。应用级存储上限默认 100 GB,等于固定 CU 配额(MaxCU)× 每 CU 存储上限(max_storage_per_cu,默认 50 GB),可通过调大 max_storage_per_cu 或提高 MaxCU 修改。在阿里云控制台 ES Serverless 应用详情页可查看当前存储用量和上限配置。