遅延マテリアライゼーションとは何ですか。
データベースでSQLクエリを実行する際、主キーまたはインデックスキーにヒットできない場合、全表スキャン(TableScan)を行わざるを得ません。この全データスキャンのコストは通常高くなります。このプロセスを最適化するために、遅延マテリアライゼーション(Lazy Materialization)技術を採用できます。この技術は、データのマテリアライゼーションを遅延させ、クエリ実行フェーズまで必要な計算とストレージを行い、それによってクエリ性能とシステム応答速度を向上させます。
読み取り専用分析エンジンがSQLクエリを実行するプロセスでは、まず述語列を読み込み、Filter演算子を使用して計算を行い、フィルタリングされた結果を取得します。その後、読み取り専用分析エンジンはこれらのフィルタ結果に基づいて、読み取りが必要な他の列データをマテリアライズします。この方法により、非述語列の大量のフィルタリングデータに対する読み取り量が効果的に削減され、スキャン速度が向上します。
遅延マテリアライゼーションのメリット
読み取り専用分析エンジンではデータが圧縮されているため、マテリアライゼーションの過程でデータを解凍する必要があります。遅延マテリアライゼーション技術を活用することで、解凍するデータ範囲を削減でき、これにより解凍に伴うCPUオーバーヘッドを軽減できます。
データベースで複数の列に関連するSQLクエリを実行する場合、早期マテリアライゼーションでは最終結果のクエリに使用されない可能性がある列も含め、すべての列データを読み取り組み合わせる可能性があります。これに対し、遅延マテリアライゼーション戦略はデータの組み合わせプロセスを遅延させ、データベースが真に必要な列データだけを読み取り処理することを可能にします。このアプローチにより、不要なI/Oオペレーションが効果的に削減され、クエリ効率が向上します。
遅延マテリアライゼーションは、フィルタリングや集約などの操作をより効率的にします。これらの操作は行全体のデータではなく列データのみを処理すればよいためです。列ストレージの特性(データ圧縮やバッチ処理など)がより効果的に発揮され、クエリ実行速度を向上させることができます。
遅延マテリアライゼーション関連パラメータ
遅延マテリアライゼーション機能はパラメータlibra_enable_late_materializationで制御可能であり、パラメータ値がONの場合は遅延マテリアライゼーション機能が有効化されていることを意味します。
|
パラメータ型 | BOOL。 |
既定値 | ON。 |
値の範囲 | ON:遅延マテリアライゼーション機能を有効化します。 OFF:遅延マテリアライゼーション機能を無効化します。 |
スコープ | Global & Session。 |
SET_VARヒントのサポートを提供します。 | はい。 |
set libra_enable_late_materialization=off;
set libra_enable_late_materialization=on;
遅延マテリアライゼーションの例
下図のように、遅延マテリアライゼーションを有効化すると、実行計画でCOLUMN READオペレータを明確に確認できます。このオペレータは遅延マテリアライゼーション機能が有効になっている例です。
ヒント内での遅延マテリアライゼーションの設定方法
SET_VARヒントを使用することで、単一のSQL文内で遅延マテリアライゼーションの有効化または無効化を指定できます。例は以下の通りです。
select /*+ set_var(libra_enable_late_materialization=1)*/ * from t where c1=1 and c2=1;