--- title: "异步搜索最大运行时间" date: 2026-03-23 lastmod: 2026-03-23 description: "控制异步搜索请求最长运行时间的配置项说明" tags: ["异步搜索", "超时控制", "资源保护"] summary: "配置项作用 # async_search.max_search_running_time 配置项限制异步搜索请求的最长运行时间。当异步搜索的运行时间超过此限制时,搜索将被自动终止,以防止长时间运行的搜索消耗过多资源。 配置项类型 # 该配置项为动态配置,可以在运行时通过集群更新 API 进行修改,无需重启节点。 默认值 # 12h(12小时) 是否必需 # 可选配置项 取值范围 # 正数时间值(如 1m、1h、24h 等) 工作原理 # 异步搜索允许长时间运行的查询在后台执行。该配置项作为安全机制,防止搜索无限期运行: 运行时间计算:从搜索开始执行到当前时间的持续时间 超时检查:活跃上下文清理器定期检查运行时间 自动终止:超过限制的搜索会被自动取消并释放资源 状态更新:被终止的搜索状态会标记为超时 使用示例 # # 默认配置(12小时) async_search.max_search_running_time: 12h # 缩短超时时间(3小时) async_search.max_search_running_time: 3h # 延长超时时间(24小时) async_search.max_search_running_time: 24h # 设置为1小时 async_search.max_search_running_time: 1h 推荐设置建议 # 生产环境建议:根据实际业务查询特点设置 推荐配置: # 短查询为主(1-3小时) async_search.max_search_running_time: 3h # 中等复杂度查询(6-12小时) async_search.max_search_running_time: 12h # 复杂聚合分析(12-24小时) async_search.max_search_running_time: 24h 设置考虑因素:" --- ## 配置项作用 `async_search.max_search_running_time` 配置项限制异步搜索请求的最长运行时间。当异步搜索的运行时间超过此限制时,搜索将被自动终止,以防止长时间运行的搜索消耗过多资源。 ## 配置项类型 该配置项为**动态配置**,可以在运行时通过集群更新 API 进行修改,无需重启节点。 ## 默认值 ``` 12h(12小时) ``` ## 是否必需 **可选配置项** ## 取值范围 ``` 正数时间值(如 1m、1h、24h 等) ``` ## 工作原理 异步搜索允许长时间运行的查询在后台执行。该配置项作为安全机制,防止搜索无限期运行: 1. **运行时间计算**:从搜索开始执行到当前时间的持续时间 2. **超时检查**:活跃上下文清理器定期检查运行时间 3. **自动终止**:超过限制的搜索会被自动取消并释放资源 4. **状态更新**:被终止的搜索状态会标记为超时 ## 使用示例 ```yaml # 默认配置(12小时) async_search.max_search_running_time: 12h # 缩短超时时间(3小时) async_search.max_search_running_time: 3h # 延长超时时间(24小时) async_search.max_search_running_time: 24h # 设置为1小时 async_search.max_search_running_time: 1h ``` ## 推荐设置建议 **生产环境建议**:根据实际业务查询特点设置 **推荐配置:** ```yaml # 短查询为主(1-3小时) async_search.max_search_running_time: 3h # 中等复杂度查询(6-12小时) async_search.max_search_running_time: 12h # 复杂聚合分析(12-24小时) async_search.max_search_running_time: 24h ``` **设置考虑因素:** 1. **查询复杂度**:聚合、关联等复杂查询需要更长时间 2. **数据量**:大规模数据集的扫描和聚合耗时较长 3. **资源保护**:防止异常查询长时间占用资源 4. **业务需求**:确保合理的查询能在时限内完成 ## 相关配置项 | 配置项 | 作用 | 默认值 | |-------|------|-------| | `async_search.max_keep_alive` | 结果最大保留时间 | 5天 | | `async_search.active.context.reaper_interval` | 活跃上下文清理间隔 | 5分钟 | | `async_search.node_concurrent_running_searches` | 并发搜索数量限制 | 20 | ## 搜索超时状态 当搜索超过最大运行时间时,异步搜索的状态将变为: ```json { "id": "Fm_QRn8BRiWfSeIP-2Xk7A", "status": "cancelled", "error": { "type": "search_context_execution_exception", "reason": "Search was cancelled as it ran longer than the maximum allowed time [12h]" } } ``` ## 超时检查机制 ``` ┌─────────────────────────────────────────────────────────┐ │ Async Search Started │ └─────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────┐ │ Active Context Reaper (每5分钟) │ │ 检查: 当前时间 - 开始时间 > max_search_running_time? │ └─────────────────────────────────────────────────────────┘ │ ┌───────────┴───────────┐ │ Yes │ No ▼ ▼ ┌───────────────────┐ ┌──────────────────────┐ │ 搜索被终止 │ │ 搜索继续执行 │ │ 释放资源 │ │ 等待下次检查 │ └───────────────────┘ └──────────────────────┘ ``` ## 注意事项 1. **动态更新**:修改此配置后立即生效,影响所有正在运行的异步搜索 2. **与 keep_alive 的区别**: - `max_search_running_time`:控制搜索执行的最长时间 - `max_keep_alive`:控制搜索结果保存的最长时间 3. **资源释放**:超时的搜索会被活跃上下文清理器清理,释放相关资源 4. **监控建议**:建议监控异步搜索的运行时间分布,根据实际情况调整此参数 5. **合理设置**:设置过短可能导致正常查询被意外终止,设置过长则无法有效保护资源