ApsaraDB for SelectDB は、最新のオプティマイザーである Nereids をサポートしています。従来のオプティマイザーと比較して、Nereids は、複数テーブル結合クエリや複数層ネストされたサブクエリなどの複雑なクエリに対してより高いパフォーマンスを提供します。さらに、Nereids は、最適化ルールで発生する可能性のある論理エラーを最小限に抑え、最適化ルールと処理ステージの拡張を容易にし、ビジネス要件を満たす、より安定した迅速な応答を提供します。
概要
最新のクエリ オプティマイザーは、より複雑なクエリ文やより多様なクエリ シナリオなどの課題に直面しています。同時に、ユーザーはクエリ結果を迅速に取得することをますます強く望んでいます。従来のオプティマイザーの古いアーキテクチャは、将来の迅速なイテレーションの要件を満たしていません。
これらの問題を解決するために、ApsaraDB for SelectDB は、最新のアーキテクチャ向けに Nereids を提供しています。Nereids は、ApsaraDB for SelectDB でのクエリ要求を効率的に最適化し、処理効率を向上させ、優れた拡張性を提供します。これにより、Nereids がより複雑なクエリを処理し、将来的にシステムをさらに拡張するための強固な基盤が築かれます。
メリット
よりインテリジェント
Nereids は、ルールベースの最適化(RBO)とコストベースの最適化(CBO)の最適化ポイントをルールの形式で提示します。Nereids は、各ルールに対して、クエリ プランの形状を記述するために使用される一連のパターンを提供し、これにより、宛先クエリ プランと正確に一致させることができます。このようにして、Nereids は、複数層ネストされたサブクエリなどの、より複雑なクエリ文に対してより高いパフォーマンスを提供できます。
さらに、Nereids の CBO は高度な Cascades フレームワークに基づいて開発されており、さまざまなデータ統計を使用し、より科学的な側面を持つコスト モデルを適用します。これにより、Nereids は複数テーブル結合クエリにより適したものになります。
次の図は、Transaction Processing Performance Council(TPC)-H スケール ファクター(SF)100(TPC-H SF100)シナリオにおけるクエリ速度の観点から、新旧のオプティマイザーを比較したものです。このシナリオでは、3 つのバックエンド(BE)ノードが使用され、各ノードには 16 個の CPU コアと 64 GB のメモリがあります。Nereids は元の SQL クエリを実行し、統計情報は SQL クエリが実行される前に収集されます。従来のオプティマイザーは、元の SQL クエリと手動で最適化された SQL クエリを実行します。Nereids のクエリ パフォーマンスは、手動最適化前の従来のオプティマイザーよりもはるかに優れており、手動最適化後の従来のオプティマイザーのクエリ パフォーマンスとほぼ同じです。
より堅牢
Nereids のすべての最適化ルールは、論理実行プラン ツリーに実装されています。クエリの構文とセマンティクスが分析された後、クエリはツリー構造に変換されます。従来のオプティマイザーと比較して、ツリー構造はより合理的で統一された内部データ構造を提供します。たとえば、Nereids がサブクエリを処理する場合、Nereids は、従来のオプティマイザーでサブクエリが複数のルールによって個別に処理されるのを防ぎます。これにより、最適化ルールで発生する可能性のある論理エラーが最小限に抑えられます。
より柔軟
Nereids のアーキテクチャは、より洗練され合理的です。これにより、Nereids は最適化ルールと処理ステージを簡単に拡張し、新しい要件に即座に対応できます。
Nereids の使用
Nereids を有効にします。
説明デフォルトでは、Nereids は有効になっています。
SET enable_nereids_planner=true;従来のオプティマイザーを使用するための自動フォールバック機能を有効にします。
SET enable_fallback_to_original_planner=true;
Nereids の CBO 機能を最大限に活用するには、クエリ パフォーマンスを監視するテーブルに対して ANALYZE 文を実行して、より多くの統計情報を収集することをお勧めします。詳細については、「統計」をご参照ください。
使用上の注意
サポートされていない機能
自動フォールバック機能が有効になっている場合、Nereids で問題が発生すると、従来のオプティマイザーが実行に使用されます。
JSON、ARRAY、MAP、および STRUCT データ型はサポートされていません。クエリ対象のテーブルに上記のデータ型のデータが含まれている場合、またはクエリ文の関数が上記のデータ型のデータを返す場合、Nereids はクエリを最適化できません。
Nereids は、
INSERT INTO SELECT、UPDATE、およびDELETEの DML 文のみをサポートしています。Nereids は、フィルター条件を持つマテリアライズド ビューをサポートしていません。
関数エイリアスはサポートされていません。
Java および Hadoop Distributed File System(HDFS)のユーザー定義関数(UDF)はサポートされていません。
Nereids は、高並行ポイント クエリを最適化できません。
既知の問題
Nereids は、パーティション キャッシュを使用してクエリを高速化できません。