[论文解读] Bao: Learning to Steer Query Optimizers
Bao 是一种基于强化学习的系统,通过学习发出粗粒度提示(如禁用特定连接算子)来增强传统查询优化器,从而提升查询性能。通过在上下文多臂老虎机框架中结合树卷积神经网络与汤普森采样,Bao 实现了快速学习(约1小时内完成),降低了中位数延迟和尾部延迟,并在工作负载、数据和模式变化下保持性能稳定,优于开源和商业优化器。
Query optimization remains one of the most challenging problems in data management systems. Recent efforts to apply machine learning techniques to query optimization challenges have been promising, but have shown few practical gains due to substantive training overhead, inability to adapt to changes, and poor tail performance. Motivated by these difficulties and drawing upon a long history of research in multi-armed bandits, we introduce Bao (the BAndit Optimizer). Bao takes advantage of the wisdom built into existing query optimizers by providing per-query optimization hints. Bao combines modern tree convolutional neural networks with Thompson sampling, a decades-old and well-studied reinforcement learning algorithm. As a result, Bao automatically learns from its mistakes and adapts to changes in query workloads, data, and schema. Experimentally, we demonstrate that Bao can quickly (an order of magnitude faster than previous approaches) learn strategies that improve end-to-end query execution performance, including tail latency. In cloud environments, we show that Bao can offer both reduced costs and better performance compared with a sophisticated commercial system.
研究动机与目标
- 解决现有学习型查询优化器的局限性,包括高训练开销、对数据/模式变化的脆弱性以及尾部性能差的问题。
- 在不替换传统查询优化器的前提下,提升端到端查询执行性能,尤其是尾部延迟。
- 通过高效、增量式学习,实现对动态工作负载、数据和模式变化的快速适应。
- 为多租户云环境提供可定制的优化目标(如 CPU 时间、I/O 操作次数)。
- 在现有优化器之上集成机器学习增强功能,而非完全替换,从而保留数十年来手工调优的宝贵经验。
提出的方法
- Bao 将查询提示选择建模为上下文多臂老虎机问题,其中每个提示集合被视为一个‘臂’,并根据预测性能选择查询计划。
- 采用树卷积神经网络对查询逻辑计划进行嵌入,并提取结构特征以表示上下文信息。
- 使用汤普森采样在探索与利用之间取得平衡,确保以低遗憾实现高效学习。
- 对于每个到达的查询,Bao 选择一个提示集合,通过底层优化器执行查询,并观察奖励(如执行时间、I/O 次数)以更新其策略。
- 该系统学习一种策略,将查询结构映射到最优提示集合,从而相对于每个查询的最佳可能提示集合将遗憾最小化。
- 训练效率高:Bao 仅需在真实工作负载上训练约1小时,即可获得显著的性能提升。
实验结果
研究问题
- RQ1学习型系统能否在极短训练时间内实现性能提升,且无需替换底层优化器?
- RQ2此类系统能否在数据、模式或查询工作负载发生动态变化时仍保持性能优势?
- RQ3系统能否在训练数据稀疏的情况下,同时降低中位数和尾部延迟?
- RQ4系统能否针对不同性能指标(如 CPU 时间、I/O 次数)进行定制化优化?
- RQ5系统能否避免常见于学习型优化器中的灾难性性能退化?
主要发现
- Bao 在训练仅1小时后,其中位遗憾已低于 PostgreSQL,在 IMDb 和 Stack 工作负载中均实现了性能提升。
- 在尾部性能方面,Bao 从未选择需要超过30秒 CPU 时间的执行计划,而 PostgreSQL 在某些情况下选择了需要超过720秒的计划。
- 在连接顺序基准测试中,Bao 仅在113个查询中的3个出现回归,且所有回归均在3秒以内,同时在10个查询上实现了超过20秒的性能提升。
- 无论 Bao 是基于 CPU 时间还是 I/O 指标进行训练,其在 CPU 时间和 I/O 指标上的中位遗憾均低于 PostgreSQL。
- 当以最小化 CPU 时间为目标进行训练时,Bao 在暖缓存场景下也显著低于 PostgreSQL 的中位遗憾和尾部遗憾。
- Bao 可定制优化目标的能力使其在多租户云环境中有效降低成本并提升性能。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。