多くのジョブが同時に開始される場合 (例えば、深夜 0 時にトリガーされる日次バッチジョブなど)、スケジューリングバックエンドに過負荷がかかる可能性があります。SchedulerX は、同時に実行されるジョブの数を制限することでこれを防ぐ、アプリケーションレベルの速度制限機能を提供します。同時実行数の上限を超えたジョブは、破棄される代わりにキューで待機します。また、キューに入れられたジョブに優先度を割り当てることで、スロットが利用可能になったときに優先度の高いジョブから先に実行させることができます。
ジョブの優先度設定は、単一のアプリケーション内でのみ適用されます。他のアプリケーションのスケジューリングには影響しません。
アプリケーションレベルの速度制限の利用シーン
ワークロードにバーストピークがある場合 (例えば、同じ開始時刻を持つ数百の日次ジョブなど) は、アプリケーションレベルの速度制限を使用します。キューメカニズムは、ジョブの実行間隔を調整し、バックエンドが過負荷になるのを防ぎます。
| シナリオ | 推奨事項 |
|---|---|
| バーストピーク (多くのジョブが同時に開始される) | 優先度付きキューの有無にかかわらず、アプリケーションレベルの速度制限を使用する |
| 持続的な高頻度負荷 (分単位のジョブ) | クライアントサイドの速度制限を使用するか、クライアントの処理能力をスケールアップする |
速度制限と優先度付きキューは、バーストピークのシナリオ向けに設計されています。持続的な負荷がかかる状況でキューを使用すると、実行が平滑化されるのではなく、キューが滞留してしまいます。
同時実行数の制限設定
同時実行数の制限は、アプリケーションで同時に実行されるジョブの数を制限します。上限に達すると、新しいジョブは待機キューに入ります。
ステップ 1:フロー制御の有効化
SchedulerX コンソールで、アプリケーショングループを作成または編集します。詳細については、「アプリケーショングループの作成」をご参照ください。
[詳細設定] セクションで、[フロー制御] をオンにします。このトグルはデフォルトでオフになっています。
[同時実行タスクインスタンス数] に、同時に実行できるジョブの最大数を設定します。

ステップ 2:キュー動作の確認
アプリケーショングループに 3 つのジョブ (例:hello_jobA、hello_jobB、hello_jobC) を作成します。

各ジョブの [操作] 列にある [一度実行] をクリックして、ジョブをトリガーします。
左側のナビゲーションウィンドウで、[インスタンス] をクリックします。[タスクインスタンスリスト] タブで、以下を確認します。
hello_jobA が実行中であること。
hello_jobB と hello_jobC がプールで待機中であること。
hello_jobA が完了すると、hello_jobB が実行キューに入ります。
同時実行数の上限が適用され、超過したジョブは同時に実行されたり破棄されたりするのではなく、キューに追加されます。
優先度に基づくプリエンプションの追加
優先度に基づくプリエンプションは、同時実行数の制限を基盤としています。各ジョブには、高、中、低のいずれかの優先度レベルが設定されます。キューのスロットが空くと、投入された順序に関係なく、待機中のジョブの中で最も優先度の高いものが次に実行されます。
この概念は、Yet Another Resource Negotiator (YARN) が異なる優先度のジョブに対してリソースを分離する方法に似ています。

ステップ 1:ジョブへの優先度の割り当て
ジョブを作成または編集する際に、優先度レベルを「高」、「中」、または「低」に設定します。

ステップ 2:プリエンプション動作のテスト
優先度によるプリエンプションがどのように機能するかを確認するために、アプリケーション (例:dts-all.hxm) の速度制限を有効にし、[同時実行タスクインスタンス数] を 1 に設定して、一度に 1 つのジョブのみが実行されるようにします。次に、異なる優先度を持つ 3 つのジョブを作成します。
| ジョブ | 優先度 |
|---|---|
| ジョブ A | 中 |
| ジョブ B | 低 |
| ジョブ C | 高 |
ジョブを「中」、「低」、「高」の順にトリガーします。

期待される結果:
他に実行中のジョブがないため、ジョブ A (中) がすぐに開始されます。
ジョブ B (低) とジョブ C (高) がキューに入ります。
ジョブ A が完了すると、1 つのスロットが空きます。ジョブ C (高) はジョブ B (低) よりも優先度が高いため、次に実行されます。
ジョブ B (低) が最後に実行されます。
スロットが空くと、最初に投入されたジョブではなく、最も優先度の高いジョブが次に実行されます。
制限事項と動作
| 制限事項 | 詳細 |
|---|---|
| 優先度の範囲 | 優先度は単一のアプリケーション内でのみ適用されます。ご利用のジョブに高い優先度を設定しても、他のアプリケーションのジョブより先に実行されることはありません。 |
| 持続的な負荷下でのキューの動作 | キューメカニズムはバーストピークに対して機能します。持続的な高頻度のワークロードの場合、キューは排出されるよりも速く滞留します。分単位のジョブには、クライアントサイドの速度制限を使用するか、クライアントの処理能力をスケールアップしてください。 |
よくある質問
ジョブの優先度を使用して、他のアプリケーションのジョブより先に自分のジョブを実行できますか?
いいえ。ジョブの優先度は単一のアプリケーションに限定されます。ご利用のアプリケーション内の高優先度ジョブが、他のアプリケーションのスケジューリングに影響を与えることはありません。
分単位のジョブに速度制限を使用すべきですか?
速度制限とキューベースのスケジューリングは、多くのジョブが同時に開始されるバーストピークに対して機能します。持続的な高スループットの分単位ジョブの場合、キューは排出されるよりも速く滞留する可能性があります。その場合は、クライアントサイドで速度を制限するか、クライアントの処理能力をスケールアップしてください。