ディスクへのスピル
このトピックでは、大規模なオペレーターの中間計算結果をディスクにスピルする方法について説明します。
概要
StarRocks のようにクエリ実行にインメモリ計算を依存するデータベースシステムは、大規模なデータセットに対して集計、ソート、ジョインオペレーターを使用してクエリを処理する際に、膨大なメモリリソースを消費する可能性があります。メモリ制限に達すると、これらのクエリはメモリ不足(OOM)により強制終了されます。
しかし、マテリアライズドビューの構築や、INSERT INTO SELECT を使用した軽量な ETL の実行など、メモリ集約型のタスクを安定して完了させたいが、パフォーマンスが最優先ではない場合もあります。これらのタスクは簡単にメモリリソースを使い果たし、クラスター内で他のクエリをブロックする可能性があります。通常、この問題に対処するためには、これらのタスクを個別に微調整し、リソース分離戦略に依存してクエリの同時実行を制御する必要があります。これは特に不便で、極端なシナリオでは失敗する可能性があります。
StarRocks v3.0.1 以降、StarRocks は一部のメモリ集約型オペレーターの中間結果をディスクにスピルすることをサポートしています。この機能を使用すると、パフォーマンスの許容可能な低下と引き換えにメモリ使用量を大幅に削減し、システムの可用性を向上させることができます。
現在、StarRocks のスピル機能は以下のオペレーターをサポートしています:
- 集計オペレーター
- ソートオペレーター
- ハッシュジョイン(LEFT JOIN、RIGHT JOIN、FULL JOIN、OUTER JOIN、SEMI JOIN、INNER JOIN)オペレーター