查询哨兵是Atlas中的一项 智能工作负载管理 (IWM) 策略,当集群过载时,它会自动终止mongod 节点上低效且长时间运行的查询操作。通过仅针对成本最高、效率最低的查询操作,查询哨兵可以快速缓解压力,同时对总体工作负载的影响最小,从而降低中断风险。
当传入操作的数量大到足以导致完全或接近完全中断时, MongoDB会认为节点过载。 MongoDB根据 CPU 利用率、队列深度、每秒操作数和延迟等指标计算过载。
重要
该策略为减载策略。如果此策略在Atlas 集群上处于活动状态并且集群过载,则可能会看到相关的过载错误。
如果长时间运行的查询在高流量期间消耗过多资源,则可能会降低集群性能并增加中断风险。 Query Sentinel 通过以下方式保护集群可用性:
在过载期间检测并终止长时间运行的查询操作
保持可用性,以实现持续成功的较短操作
在不关闭整个工作负载的情况下降低中断风险
Considerations
Atlas 集群必须运行MongoDB8.3 或更高版本才能使用此策略。在MongoDB8.3 上,默认禁用此策略。要启用或禁用 IWM 策略,请参阅 IWM 设置。
此策略仅适用于
M10+Atlas副本集集群。查询哨兵不会根据内存消耗终止操作,包括消耗内存但未主动执行的空闲游标。
查询哨兵不会暂停或对操作进行排队。
行为
当Atlas在集群上运行 Query Sentinel 策略时,它会执行以下操作:
监控过载
Atlas不断评估每个节点上的过载指标。
当Atlas检测到过载情况时,会激活查询哨兵策略。 Atlas会在以下警报条件下触发警报:
识别长时间运行的查询
查询哨兵监控当前运行的操作设立,并根据预定义的效率标准评估每个操作,其中可以包括查询运行时、查询计划摘要等。
终止匹配操作
查询哨兵发出
killOp命令来终止与策略条件匹配的操作。仅停止符合条件的操作;其余工作负载不受影响。操作终止时,服务器会返回
InterruptedDueToOverload错误代码。要学习;了解有关错误处理的更多信息,请参阅过载错误。
恢复正常运行
随着过载情况的消退,该策略将停止终止操作,集群将恢复正常运行。
当策略不再处于活动状态时,集群的操作日志中会显示以下信息事件:
"Atlas has switched Query Sentinel to monitoring mode and paused the automatic termination of expensive queries."要学习;了解详情,请参阅 IWM操作日志事件。
当该策略处于活动状态时,应用程序中长时间运行的操作将失败,并显示InterruptedDueToOverload 错误。较短的行动继续取得成功。要学习;了解有关处理过载错误的更多信息,请参阅过载错误。
可观察性
您可以使用以下方法追踪Query Sentinel 如何影响您的工作负载:
监控集群指标: 操作限制指标显示 IWM 策略已终止的操作数量。
配置警报:
当集群过载情况得到解决时, Atlas会将信息事件写入操作日志,以指示 IWM 策略的解决方案。要学习;了解详情,请参阅 IWM操作日志事件。