[论文解读] Optimization of Imperative Programs in a Relational Database
Froid 是一个可扩展的、与语言无关的框架,可自动将关系型数据库中的用户自定义函数(UDFs)转换为等价的关系代数表达式,从而实现基于成本的优化,并消除传统迭代式 UDF 执行带来的性能开销。这使得查询计划变为面向集合的、并行的,进而在真实工作负载上实现多个数量级的性能提升。
For decades, RDBMSs have supported declarative SQL as well as imperative functions and procedures as ways for users to express data processing tasks. While the evaluation of declarative SQL has received a lot of attention resulting in highly sophisticated techniques, the evaluation of imperative programs has remained naive and highly inefficient. Imperative programs offer several benefits over SQL and hence are often preferred and widely used. But unfortunately, their abysmal performance discourages, and even prohibits their use in many situations. We address this important problem that has hitherto received little attention. We present Froid, an extensible framework for optimizing imperative programs in relational databases. Froid's novel approach automatically transforms entire User Defined Functions (UDFs) into relational algebraic expressions, and embeds them into the calling SQL query. This form is now amenable to cost-based optimization and results in efficient, set-oriented, parallel plans as opposed to inefficient, iterative, serial execution of UDFs. Froid's approach additionally brings the benefits of many compiler optimizations to UDFs with no additional implementation effort. We describe the design of Froid and present our experimental evaluation that demonstrates performance improvements of up to multiple orders of magnitude on real workloads.
研究动机与目标
- 为关系型数据库中长期被忽视的 imperative 用户自定义函数(UDFs)的性能瓶颈提供解决方案,尽管这些函数被广泛使用,但其执行速度极为缓慢。
- 通过自动将 UDFs 转换为关系代数形式,消除声明式 SQL 与命令式编程之间的阻抗不匹配。
- 通过将 UDFs 嵌入主查询计划的关系表达式中,实现对 UDFs 的基于成本的优化。
- 自动为 UDFs 带来编译器优化(如无用代码消除和常量折叠)的优势,而无需额外的实现工作。
- 构建一个可扩展的框架,支持多种命令式编程语言,并无缝集成到现有的 RDBMS 查询处理流水线中。
提出的方法
- Froid 将命令式代码块建模为关系表达式,并使用 Apply 操作符将它们组合成单一的、优化后的关系表达式。
- 通过静态分析检测并转换命令式构造(例如循环、条件语句、赋值)为等价的关系代数操作。
- 应用语义上匹配常见编译器优化的关系代数简化与变换,如常量折叠和无用代码消除。
- Froid 作为预优化器运行,在主查询优化器之前转换 UDFs,避免了对查询优化器扩展或新增操作符的需求。
- 通过抽象语法树(AST)分析实现与语言无关的转换,支持扩展至多种命令式语言,而不仅限于 T-SQL。
- 该系统已集成到 Microsoft SQL Server 中,并利用现有的子查询优化技术,生成高效、面向集合的、并行的执行计划。
实验结果
研究问题
- RQ1如何自动将关系型数据库中的 imperative UDFs 转换为关系代数表达式,以实现高效的优化?
- RQ2关系代数变换能否实现与传统编译器技术(如无用代码消除和常量折叠)相同的优化效果?
- RQ3通过将迭代式 UDF 执行替换为基于关系重写的面向集合的、并行计划,可以实现多大的性能提升?
- RQ4如何在不修改查询优化器的前提下,解决声明式 SQL 与命令式编程之间的阻抗不匹配问题?
- RQ5Froid 在处理包含数千条语句的大型 UDFs 时,其可扩展性如何,同时保持极低的转换时间?
主要发现
- Froid 通过将 UDFs 转换为高效、面向集合的、并行的查询计划,在真实客户工作负载上实现了多个数量级的性能提升。
- 该框架可在 10 秒内完成对包含数千条语句的 UDFs 的转换,显著优于基于 QBS 的方法,在可扩展性和速度方面表现更优。
- Froid 中的关系代数变换实现了与传统编译器优化(如无用代码消除和常量折叠)相同的优化效果,且无需额外实现。
- Froid 的方法通过内联和重写为关系表达式,消除了昂贵的 UDF 执行,避免了迭代式、串行执行带来的性能损耗。
- 该框架可扩展支持多种命令式语言,并可无缝集成到现有 RDBMS 查询处理流水线中,无需修改优化器。
- 评估表明,Froid 能够有效处理复杂的实际工作负载,包括包含多个返回语句和冗余谓词计算的场景,而此前的方法均未能解决此类问题。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。