LQRS: Learned Query Re-optimization Framework for Spark SQL

本文提出了 LQRS 框架,通过结合课程强化学习策略与 Spark SQL 的插件式扩展,利用运行时观测数据实现查询执行前与执行中的动态重优化,从而将端到端执行时间最多降低了 90%。

Jiahao He, Yutao Cui, Cuiping Li, Jikang Jiang, Yuheng Hou, Hong Chen

发布于 2026-03-05
📖 1 分钟阅读☕ 轻松阅读

Each language version is independently generated for its own context, not a direct translation.

这篇论文介绍了一个名为 LQRS 的新系统,它的目标是让数据库(特别是 Spark SQL)在运行查询时变得更聪明、更快速。

为了让你轻松理解,我们可以把数据库查询优化想象成一位厨师在厨房里做一道复杂的菜

1. 传统厨师的困境:只看菜谱,不看火候

在传统的数据库系统中,优化器就像一位只看过菜谱但没进过厨房的厨师

  • 传统做法:在开始做菜(执行查询)之前,厨师会根据经验(统计信息)估算每种食材(数据)有多少,然后决定先炒什么、后炖什么,最后定下一个“完美计划”。
  • 问题所在:菜谱上的估算往往不准。比如,菜谱说“土豆有 10 斤”,结果一倒出来发现只有 1 斤。这时候,厨师如果死板地按照原计划,先炒那 1 斤土豆再等别的菜,效率就会极低。
  • 现有的“学习型”优化器:最近出现了一些用 AI 学习的厨师(如 Lero),它们看过很多菜谱,能猜得更准一点。但它们依然有个死穴:一旦开火(开始执行),它们就只盯着原计划,不敢中途改主意。哪怕发现土豆只剩 1 斤了,它们也不敢停下来重新安排顺序,只能硬着头皮按原计划做完。

2. LQRS 的绝招:边做边改的“超级大厨”

LQRS 就像是一位拥有“上帝视角”且敢于随时调整策略的超级大厨。它的核心理念是:“计划赶不上变化,那就边做边改!”

它把做菜的过程分成了两个阶段,并且在这两个阶段都听 AI 的:

  1. 开火前(Pre-execution):AI 先根据经验定个初步计划。
  2. 开火中(In-execution):这是 LQRS 最厉害的地方。当第一道菜炒好端上来时,AI 会立刻看一眼:“哇,原来土豆只有 1 斤!那后面的步骤得马上改!”于是,它实时调整剩下的烹饪顺序。

3. 核心比喻:乐高积木与交通指挥

为了更形象地理解 LQRS 是如何工作的,我们可以用两个比喻:

比喻一:搭乐高(动态调整计划)

想象你在搭一个巨大的乐高城堡(查询计划)。

  • 传统方法:你按照图纸搭好底座,然后不管发生什么,都按图纸往上搭。如果搭到一半发现某块积木(数据)其实比想象中小很多,图纸没变,你只能继续按原样搭,结果可能很笨重。
  • LQRS 方法:你每搭好一层(完成一个“查询阶段”),就停下来看看。
    • 如果 AI 发现:“嘿,这块积木其实很小,我们可以把它放到最上面去,这样更稳!”
    • 于是,AI 会立刻把还没搭的部分拆下来,重新设计结构,把那块小积木挪到前面去。
    • 这种“拆了重搭”的能力,让 LQRS 能利用真实的现场情况,做出比图纸更优的安排。

比喻二:城市交通指挥(实时路况)

把数据库查询想象成早高峰的堵车

  • 传统优化器:像是一个只看历史地图的导航。它告诉你:“走 A 路最快,因为昨天 A 路不堵。”于是你上了 A 路。结果今天 A 路突然发生了事故(数据量突变),但你还在按导航走,结果堵死了。
  • LQRS:像是一个实时交通指挥中心
    • 它先给你指了条路(初始计划)。
    • 当你走到第一个路口(第一个查询阶段结束),指挥中心立刻收到实时数据:“前方 A 路拥堵,但 B 路畅通!”
    • 它马上通过广播告诉你:“掉头!改走 B 路!”
    • 这种实时反馈即时改道,避免了你在死胡同里浪费时间。

4. LQRS 是怎么学会的?(课程学习法)

LQRS 不是生下来就什么都会的,它像学生一样,通过**“课程学习”(Curriculum Learning)**一步步变强:

  1. 初级班:刚开始,只让它做最简单的决定,比如“先选哪个食材”(初始化策略)。
  2. 中级班:等它熟练了,再让它做稍微难一点的,比如“把两个食材的顺序换一下”(交换节点)。
  3. 高级班:最后,让它处理最复杂的任务,比如“根据刚才炒出来的菜量,决定要不要把大锅换成小锅”(动态调整连接顺序和策略)。

通过这种循序渐进的训练,LQRS 学会了在复杂的“厨房”里,如何根据真实的火候(运行时数据)来做出最聪明的决定。

5. 结果有多好?

论文中的实验表明,LQRS 的效果非常惊人:

  • 相比其他聪明的 AI 优化器,LQRS 能把查询时间缩短 90%
  • 它不仅能处理复杂的“大菜”(多表连接),还能在数据量突然变化时(比如原本以为有 100 万条数据,结果只有 1 条),迅速调整策略,避免浪费资源。

总结

LQRS 就是一个“会看脸色行事”的数据库优化器。
它不再死板地执行出发前定好的计划,而是像一位经验丰富的老司机,在开车过程中不断观察路况(运行时数据),随时调整方向盘和速度。它证明了:在数据库的世界里,最好的计划不是出发前想出来的,而是根据路上的实际情况,边开边改出来的。