ジョブスケジューリングでは、アプリケーションレベルのスロットリングを実行するために 2 つのポリシーを設定できます。アプリケーションのスロットリングを有効にしてキューサイズを指定するか、優先順位に基づいてジョブのプリエンプションをサポートするキューを設定します。これにより、スケジューリングシステムの安定性とミッションクリティカルなジョブの適時性を確保できます。このトピックでは、アプリケーションレベルのリソースを効率的に管理し、優先順位に基づいてジョブをスケジュールする方法について説明します。
シナリオ
ジョブスケジューリングのピーク時には、システムは重いワークロードを処理します。たとえば、多数のデイリージョブが同時に開始された場合、バックエンドシステムは効果的なスケジューリング対策なしでは同時ワークロードを処理できない可能性があります。これにより、システムクラッシュが発生する可能性があります。この問題を解決するために、アプリケーションに対して同時に実行できるジョブの最大数を制御するキューメカニズムが導入されています。キューメカニズムは、ジョブを段階的に割り当ててスケジュールし、システムリソースの効率的な使用と安定したアプリケーション操作を確保します。
アプリケーションレベルのスロットリングのポリシーを設定する
アプリケーションのスロットリングを有効にしてキューサイズを指定する
アプリケーショングループを作成および編集するときに、詳細設定 セクションで [フロー制御] をオンにします。デフォルトでは、フロー制御は無効になっています。アプリケーショングループの作成方法については、「アプリケーショングループを作成する」をご参照ください。
フロー制御をオンにすると、[同時タスクインスタンスの数] パラメーターを設定できます。このパラメーターは、アプリケーションに対して同時に実行できるジョブの最大数を指定します。ジョブの数がこのパラメーターの値を超えると、超過したジョブはキューで待機し、破棄されません。

アプリケーショングループに 3 つのジョブを作成し、各ジョブの操作列で [一度だけ実行] をクリックします。

左側のナビゲーションウィンドウで、[インスタンス] をクリックします。表示されるページで、[タスクインスタンスリスト] タブをクリックします。このタブでは、最初にトリガーされた hello_jobA ジョブが実行されていることを確認できます。 hello_jobB ジョブと hello_jobC ジョブはプールで待機します。
hello_jobA ジョブが実行されると、hello_jobB ジョブが実行キューに入ります。
優先順位に基づいてジョブのプリエンプションをサポートするキューを設定する
次の図は、Yet Another Resource Negotiator(YARN)の優先順位ベースのキューメカニズムを示しています。キューメカニズムは、優先順位の異なるジョブのリソースを分離します。

次の手順は、SchedulerX がアプリケーションレベルのスロットリングとタスクの優先順位を組み合わせて使用して、優先順位に基づいてタスクのプリエンプションをサポートするキューを設定する方法を示しています。
各ジョブには優先順位を付けることができます。アプリケーションで複数のジョブが同時にスケジューリングのために送信された場合、優先順位の高いジョブが最初にスケジュールされます。

dts-all.hxm という名前のアプリケーションのスロットリングを有効にし、[同時タスクインスタンスの数] パラメーターを 1 に設定して監視を容易にし、高、中、低の優先順位が割り当てられた 3 つのジョブを作成します。ジョブを次の順序で 1 回トリガーします。中優先度、低優先度、高優先度。

左側のナビゲーションウィンドウで、[インスタンス] をクリックします。表示されるページで、[タスクインスタンスリスト] タブをクリックします。このタブでは、優先順位が中のジョブがトリガーされたときに、キューにジョブがないことを確認できます。この場合、優先順位が中のジョブが最初に実行されます。
優先順位が中のジョブが実行されると、キューにアイドルスロットが使用可能になります。この場合、優先順位の高いジョブは、優先順位の低いジョブをプリエンプションします。優先順位の高いジョブは、優先順位の低いジョブの前に実行されます。
よくある質問
ジョブに高い優先順位を指定して、他のユーザーのジョブの前にジョブが優先的にスケジュールされるようにすることはできますか?
ジョブの優先順位設定は、特定のアプリケーション内でのみ有効であり、他のアプリケーションには影響しません。
分単位のジョブにキューメカニズムとスロットリングを使用できますか?
ジョブスケジューリングのバーストピークが発生するシナリオでは、キューメカニズムとスロットリングを使用できます。1 分あたりのスケジューリングワークロードが重い場合は、キューの蓄積を防ぐために、キューメカニズムとスロットリングを使用しないことをお勧めします。分単位のジョブの場合は、クライアント側のスロットリングを実行するか、クライアントの処理能力をスケーリングできます。