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

Microservices Engine:SchedulerX でのジョブの同時実行数と優先度の管理

最終更新日:Mar 12, 2026

スケジューリングのピーク期間中に、多数のジョブが同時に開始されると、バックエンドリソースに負荷が集中し、障害が発生する可能性があります。SchedulerX は、これを防ぐために次の 2 つのメカニズムを提供します:

  • 同時実行数制限 -- アプリケーション内で同時に実行されるジョブの数を制限します。上限を超えたジョブは破棄されず、自動的にキューに追加されます。

  • 優先度に基づくプリエンプション -- ジョブに優先度を割り当てることで、キューのスロットが空いたときに、優先度の高いジョブが優先度の低いジョブよりも先に実行されるようにします。

これらのメカニズムは、個別に使用することも、組み合わせて使用することもできます。優先度付きキューを構築することで、システムの安定性を維持しながら、ミッションクリティカルなジョブを確実に優先実行できます。

各メカニズムの利用シーン

シナリオ推奨アプローチ理由
毎日数百のバッチジョブが 00:00 に開始され、システムに過負荷がかかる同時実行数制限のみ超過したジョブをキューイングすることで実行を平準化する
リアルタイムデータ同期を夜間レポートの前に実行する必要がある同時実行数制限 + 優先度に基づくプリエンプション優先度の高いジョブがキュー内の優先度の低いジョブをプリエンプトする
ピーク時間帯にバーストスケジューリングが発生するが、個々のジョブは迅速に完了する同時実行数制限のみ優先度の複雑さを追加することなく、リソースの枯渇を防ぐ
時間に制約のあるジョブとそうでないジョブが混在するワークロード同時実行数制限 + 優先度に基づくプリエンプション時間に制約のあるジョブが次に利用可能なスロットを確実に取得できるようにする

前提条件

開始する前に、以下が準備できていることを確認してください:

  • SchedulerX アプリケーショングループ。詳細については、「アプリケーショングループの作成」をご参照ください。

  • アプリケーショングループ内に少なくとも 1 つのジョブが作成されていること

アプリケーションの同時実行数制限の設定

アプリケーション内で同時に実行されるジョブの数を制限します。上限に達した場合、新しいジョブは破棄されずにキューで待機します。

  1. アプリケーショングループを開き、詳細設定 セクションに移動します。

  2. フロー制御 を有効にします。デフォルトでは、フロー制御 は無効になっています。

  3. 同時実行タスクインスタンス数 パラメーターを、同時に実行できるジョブの最大数に設定します。

    Flow Control configuration

  4. 設定を検証するために、アプリケーショングループに 3 つのジョブを作成し、各ジョブの 操作 列にある 一度実行 をクリックします。

    Three jobs created

  5. 左側のナビゲーションウィンドウで インスタンス をクリックし、タスクインスタンスリスト タブをクリックします。最初にトリガーされたジョブ (hello_jobA) が実行中です。残りのジョブ (hello_jobB と hello_jobC) はキューで待機します。

  6. hello_jobA が完了すると、hello_jobB は自動的にキューから実行スロットに移動します。

優先度に基づくプリエンプションの設定

同時実行数制限とジョブの優先度を組み合わせることで、キューのスロットが利用可能になったときに、優先度の高いジョブが優先度の低いジョブをプリエンプトするようにします。

優先度プリエンプションの仕組み

このメカニズムは、Yet Another Resource Negotiator (YARN) の優先度付きキューと同じ原則に従います。リソースはジョブの優先度レベルに基づいて割り当てられます。

YARN priority-based queue mechanism

複数のジョブがキューに入れられている状態でスロットが空くと、SchedulerX は最初に送信されたジョブではなく、最も優先度の高いジョブを選択します。

優先度の割り当てとプリエンプションのテスト

  1. 各ジョブに優先度を割り当てます。同じアプリケーション内では、優先度の高いジョブが先にスケジュールされます。

    Job priority configuration

  2. アプリケーション (例: dts-all.hxm) の フロー制御 を有効にし、同時実行タスクインスタンス数1 に設定して、一度に 1 つのジョブのみが実行されるようにします。次に、高、中、低の優先度を持つ 3 つのジョブを作成します。

    Throttling setup with priorities

  3. 中優先度、低優先度、高優先度の順にジョブをトリガーします。

  4. 左側のナビゲーションウィンドウで インスタンス をクリックし、タスクインスタンスリスト タブをクリックします。中優先度のジョブがトリガーされたとき、キューにはジョブがなかったため、即座に実行が開始されます。

  5. 中優先度のジョブが完了してスロットが空くと、低優先度のジョブが先に送信されていたにもかかわらず、高優先度のジョブが低優先度のジョブをプリエンプトして次に実行されます。

注意事項

  • キューベースの速度制限は、短い時間枠で多くのジョブがトリガーされるバーストスケジューリングシナリオに最適です。アプリケーションが重いワークロードで毎分継続的にジョブをスケジュールする場合、キューが溜まる可能性があります。高頻度のスケジューリングの場合は、代わりにクライアント側の速度制限を使用するか、処理能力をスケールアップしてください。

  • 優先度の設定は単一のアプリケーションにスコープが限定されます。あるアプリケーションでの高優先度ジョブは、他のアプリケーションのジョブスケジューリングには影響しません。

よくある質問

アプリケーション内の優先度設定は他のアプリケーションに影響しますか?

いいえ。ジョブの優先度は、それが設定されたアプリケーション内でのみ有効です。他のアプリケーションのスケジューリングには影響しません。

毎分実行されるジョブにキューベースの速度制限を使用すべきですか?

毎分のワークロードが一貫して重い場合は、使用すべきではありません。キューベースの速度制限は、ジョブのスパイクが一度にシステムに到達するバーストシナリオ向けに設計されています。持続的にボリュームの大きい分単位のジョブの場合は、クライアント側の速度制限を使用するか、負荷に合わせて処理インフラストラクチャをスケールアップしてください。

次のステップ