共用额度下最反直觉的结果是:按团队重要程度排优先级,往往比按查询紧急程度排更慢。因为额度消耗速度取决于查询的批量大小和重试次数,而不是谁喊得急。更稳的做法是先把查询分成“阻塞交付”和“探索验证”两类,再给每类设定不同的消耗上限和排队位置,而不是简单按团队轮转。
固定查询指参数、对象和时间范围都已确定,跑完就能直接用于交付或决策。扩散查询指先跑一批样本,根据结果再决定要不要扩大范围。两类查询在共用额度下的行为完全不同:固定查询的消耗可预估,扩散查询的消耗取决于中间结果,可能翻倍也可能提前终止。
如果团队只按“谁先提交谁先跑”,扩散查询会不断占用额度,固定查询被反复推迟。一个可执行的动作是:给扩散查询设一个单次消耗上限,比如先跑总计划的百分之十,拿到结果后再申请下一段。这样做的结果是,固定查询的等待时间变得可预测,扩散查询也不会因为一次跑太多而挤掉别人的交付窗口。
紧急程度是提交方的主观判断,不是额度系统的可识别信号。当多个团队都说自己紧急时,排序就退化成谁声音大谁先跑。更糟的是,紧急查询常常伴随重试:第一次结果不理想就立刻换参数再跑,单次消耗被放大数倍。
可以核对的证据是查询日志里的重试次数和单次批量大小。如果某个团队的查询平均重试三次以上,那么它占用的额度远高于提交次数所显示的比例。此时把它的排队位置提前,只会让其他团队的固定查询继续积压。合理的处理是要求重试前先说明上一次结果缺少什么,避免用同一批参数反复试探。
判断一个查询是否值得插队,可以看三个信号:
当三个信号都指向同一方向时,插队的依据比较充分。如果只有“提交方说急”这一个信号,优先按原队列执行更稳妥。
假设两个团队共用同一份额度。A团队要跑一批固定查询用于当天交付,预计消耗总额度的四成;B团队要探索一批新对象,参数还没冻结。如果B先跑且不做限制,可能消耗六成以上,A的交付被推迟。如果先给B设百分之十的探索上限,B拿到样本后暂停,A的固定查询先跑完,B再根据样本决定是否继续。这个例子里没有真实数据,只是说明消耗上限如何改变排队结果。
实际执行时,下一步动作是记录每次查询的批量大小、重试次数和结果用途。跑完一轮后回看:哪些查询的重试次数最高、哪些查询的结果被下游真正使用。根据这些记录调整下一轮的消耗上限,而不是继续按团队名称或提交时间轮转。如果日志显示某类查询长期重试且结果很少被采用,就应该把它移到低优先级队列,而不是给它更多额度。