Skip to main content
QUICK REVIEW

[論文レビュー] Optimization of Imperative Programs in a Relational Database

Karthik Ramachandra, Kwanghyun Park|arXiv (Cornell University)|Dec 1, 2017
Advanced Database Systems and Queries参考文献 20被引用数 5
ひとこと要約

Froid は拡張可能で言語に依存しないフレームワークであり、リレーショナルデータベース内の User-Defined Functions (UDFs) を同等のリレーショナル代数的式に自動的に変換することで、コストベースの最適化を可能にし、従来の反復的 UDF 実行に伴うパフォーマンスのオーバーヘッドを排除する。これにより、集合指向で並列なクエリ計画が得られ、実世界のワークロードにおいて複数桁のパフォーマンス向上が達成される。

ABSTRACT

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.

研究の動機と目的

  • 命令型 User-Defined Functions (UDFs) がリレーショナルデータベースにおいて長年にわたり無視されてきたパフォーマンスのボトルneckを解消すること。これらは広く使われているが、著しく遅いことが知られている。
  • 宣言的 SQL と命令型プログラミングの間のインピーダンスミスマッチを解消するために、UDF を自動的にリレーショナル代数的形に変換すること。
  • UDF をメインのクエリ計画内にリレーショナル式として埋め込むことで、UDF のコストベースの最適化を可能にすること。
  • デッドコード削除や定数畳み込みといったコンパイラ最適化の利点を、追加の実装作業なしに自動的に UDF に適用すること。
  • さまざまな命令型言語をサポートし、既存の RDBMS クエリ処理パイプラインにシームレスに統合できるスケーラブルで拡張可能なフレームワークを構築すること。

提案手法

  • Froid は命令型コードブロックをリレーショナル式としてモデル化し、Apply 演算子を用いてそれらを組み合わせて単一の最適化されたリレーショナル式を構築する。
  • 静的解析を実行して、ループ、条件分岐、代入などの命令型構造を同等のリレーショナル代数的演算に検出・変換する。
  • 定数畳み込みやデッドコード削除といった一般的なコンパイラ最適化と意味的に一致するリレーショナル代数的簡略化および変換を適用する。
  • Froid はプレオプティマイザーとして動作し、本格的なクエリオプティマイザーの前段で UDF を変換するため、クエリオプティマイザーの拡張や新規演算子の追加が不要になる。
  • 抽象構文木 (AST) 分析を用いた言語に依存しない変換を実現し、T-SQL を超える複数の命令型言語への拡張を可能にする。
  • Microsoft SQL Server に統合され、既存のサブクエリ最適化技術を活用して、効率的で集合指向で並列な実行計画を生成する。

実験結果

リサーチクエスチョン

  • RQ1リレーショナルデータベース内の命令型 UDF をどのように自動的にリレーショナル代数的式に変換し、効率的な最適化を可能にできるか?
  • RQ2リレーショナル代数的変換は、デッドコード削除や定数畳み込みといった従来のコンパイラ技術と同等の最適化を達成できるか?
  • RQ3リレーショナル書き換えによる集合指向で並列な計画への置き換えによって、反復的 UDF 実行を排除することで、どの程度のパフォーマンス向上が達成できるか?
  • RQ4クエリオプティマイザーの変更なしに、宣言的 SQL と命令型プログラミングの間のインピーダンスミスマッチをどのように解消できるか?
  • RQ5Froid は、数千のステートメントを含む大きな UDF に対しても、低遅延の変換時間を維持しながら、どの程度スケーラブルに動作するか?

主な発見

  • Froid は、実際の顧客ワークロードにおいて、UDF を効率的で集合指向で並列なクエリ計画に変換することで、複数桁のパフォーマンス向上を達成する。
  • Froid は、10秒未満で数千のステートメントを含む UDF を変換でき、QBS に基づくアプローチに比べてスケーラビリティと速度の点で顕著に優れている。
  • Froid のリレーショナル代数的変換は、デッドコード削除や定数畳み込みといった従来のコンパイラ最適化と同等の最適化結果を達成するが、追加の実装作業は不要である。
  • Froid のアプローチにより、インライン化とリレーショナル式への再書き換えによって、高コストな反復的・逐次的実行の必要がなくなり、パフォーマンスのペナルティを回避する。
  • Froid は複数の命令型言語へ拡張可能であり、オプティマイザーの変更なしに既存の RDBMS クエリ処理パイプラインにシームレスに統合できる。
  • 評価では、Froid が複雑な実世界のワークロードを効果的に処理できることを示しており、複数のリターンステートメントや冗長な述語計算を含むケースであっても、従来のアプローチが対応できなかった問題を効果的に解決している。

より良い研究を、今すぐ始めましょう

論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。