すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB for SelectDB:パイプライン実行エンジン

最終更新日:Jan 16, 2025

ApsaraDB for SelectDB は、プッシュモードでパイプライン実行エンジンをサポートしています。 パイプライン実行エンジンは、スレッドの切り替えとスレッドのブロッキングによって発生する実行オーバーヘッドを削減し、CPU 使用率を向上させ、小さなクエリに対する大きなクエリのリソースの輻輳を軽減します。 これにより、混合負荷 SQL クエリでの CPU 実行の効率と SQL クエリの パフォーマンスが向上します。

概要

パイプライン実行エンジンは、新バージョンの ApsaraDB for SelectDB の新しいコア機能です。 パイプライン実行エンジンは、ApsaraDB for SelectDB の古い実行エンジンを置き換え、マルチコア CPU の計算能力を最大限に活用し、ApsaraDB for SelectDB のクエリ スレッド数を制限して、ApsaraDB for SelectDB での実行スレッドの肥大化の問題を解決するように設計されています。 パイプライン実行エンジンの設計、実装、および効果の詳細については、「Support Pipeline Exec Engine」をご参照ください。

しくみ

ApsaraDB for SelectDB の古い SQL 実行エンジンは、従来の Volcano モデルに基づいて設計されています。このモデルには、単一マシン マルチコア シナリオで次の問題があります。

  • マルチコア CPU の計算能力を活用しても、クエリ パフォーマンスを向上させることはできません。 ほとんどの場合、並列度を手動で設定して、クエリ パフォーマンスを最適化する必要があります。 ただし、本番環境で並列度を設定することは困難です。

  • スタンドアロン クエリの各インスタンスは、スレッド プールの 1 つのスレッドに対応しています。これにより、次の問題が発生します。

    • スレッド プールが最大容量に達すると、SelectDB のクエリ エンジンは疑似デッドロック状態になり、後続のクエリに応答できなくなります。 同時に、論理デッドロックが発生する可能性があります。 たとえば、すべてのスレッドがインスタンスでプローブ タスクを実行している場合などです。

    • ブロッキング オペレーターはスレッド リソースを占有します。 その結果、スレッド リソースをスケジュール可能なインスタンスに割り当てることができず、全体的なリソース使用率が低下します。

  • ブロッキング オペレーターは、オペレーティング システムのスレッド スケジューリング メカニズムに依存しており、特にシステム混合シナリオでは、スレッドの切り替えによって高いオーバーヘッドが発生します。

前述の問題を解決するために、ApsaraDB for SelectDB は、最新のマルチコア CPU のアーキテクチャに適合する実行エンジンを提供します。

マルチコア CPU の機能に基づいて、パイプライン実行エンジンは再設計され、データ駆動型の実行エンジンになります。 これにより、混合負荷 SQL クエリでの CPU 実行の効率と SQL クエリの パフォーマンスが向上します。 次の図は、パイプライン実行エンジンの原理を示しています。

pipeline-execution-engine-2067b3a862de84a561eabefd41d48a56.png

  1. 従来のプル実行エンジンは、プッシュ実行エンジンに変換されます。

  2. ブロッキング操作は非同期操作になるため、スレッドの切り替えとスレッドのブロッキングによって発生する実行オーバーヘッドが削減され、CPU 使用率が向上します。

  3. 実行されるスレッドの最大数は制限されています。 タイム スライス切り替えを制御することにより、混合負荷クエリ シナリオでの小さなクエリに対する大きなクエリのリソースの輻輳が軽減されます。

パイプライン実行エンジンの使用方法

セッション変数の設定

  • enable_pipeline_engine

    enable_pipeline_engine セッション変数を true に設定すると、クラスターのバックエンド(BE)ノードは、クエリ実行中にパイプライン実行エンジンを使用します。 デフォルトでは、このセッション変数は true に設定されています。

    set enable_pipeline_engine = true;
  • parallel_pipeline_task_num

    parallel_pipeline_task_num セッション変数は、SQL クエリに対して同時に実行されるパイプライン タスクの数を指定します。 デフォルトでは、このセッション変数は 0 に設定されています。 この場合、ApsaraDB for SelectDB はパイプライン タスクの数を CPU コア数の半分に自動的に設定します。 ビジネス要件に基づいてセッション変数を変更することもできます。

    set parallel_pipeline_task_num = 0;

    max_instance_num セッション変数を設定して、自動的に設定される最大同時実行数を指定できます。 デフォルトでは、このセッション変数は 64 に設定されています。