メモ
コミュニティの関心グループが Yammer から Microsoft Viva Engage に移行されました。 Viva Engage コミュニティに参加し、最新のディスカッションに参加するには、「 Finance and Operations Viva Engage Community へのアクセスを要求する 」フォームに入力し、参加するコミュニティを選択します。
プラットフォーム アップデート 31 では、機能管理 の バッチ優先順位に基づくスケジューリング 機能を有効にすることができます。 優先順位に基づくスケジューリングではバッチ グループをバッチ サーバーから切り離し、バッチ グループの優先順位を定義できます。 バッチ ジョブをバッチ サーバーに割り当てる必要はなくなりました。 代わりに、使用可能なバッチサーバー間でタスクが実行される順序を決定するために、業務要件に基づく相対的なスケジューリング優先順位が使用されます。
重要
- この機能はバージョン 10.0.25 で使用することができます。
- この機能は、バージョン 10.0.28 (PU 52) のすべての新しいインスタンスで既定で有効になっています。
- この機能は、バージョン 10.0.36 (PU 60) のすべての新しい既存のインスタンスで既定で有効になっています。
- この機能は、バージョン 10.0.38 (PU 62) から始まるすべてのインスタンスに必要です。
バッチ グループのスケジュールの優先順位を定義しますが、特定のバッチ ジョブに対してはオーバーライドできます。 スケジュール優先度分類を使用して、相対的な優先順位を宣言し、ジョブとビジネス プロセスの処理順序を決定します。 スケジューリング優先順位に使用できる値は、低、通常、高、重大、予約済みキャパシティ です。
標準 は既定値であり、機能をオンにすると、既存のすべてのバッチ グループに適用されます。 予約済キャパシティ は、最も高い優先順位を表します。 プラットフォーム更新プログラム 32 または それ以降のバージョンでは、これをジョブ専用のキャパシティとして使用できます。 詳細については、 この記事後半の バッチ専用のキャパシティ レベルを設定 セクションを参照してください。
たとえば、処理するバッチ タスクが 100 個あるとします。 予約済みキューから 40 個、クリティカル キューから 30 個、高いキューから 15 個、通常のキューから 10 個、低いキューから 5 個のタスクがあります。 システムは、優先順位に基づく処理の実行順序を選択しません。 代わりに、各優先度のバッチ タスクの重みを使用します。
| 優先度 | 重量 |
|---|---|
| 低 | 5% |
| 標準 | 10% |
| 高 | 15% |
| 重大 | 30% |
| 予約キャパシティ | 40% + 専用のXスレッド |
メモ
この機能をオンにすると、既存のすべてのバッチ グループに対してスケジュール優先度が 標準 に設定されるため、関連するバッチ ジョブとそれに関連するビジネス プロセスのビジネス要件に従って相対的な優先順位を表すよう、各バッチ グループのスケジュール優先度を計画および更新します。
プラットフォーム更新プログラム 32 には、既存のバッチジョブに対する更新サポートが含まれています。 詳細については、 この記事後半のバッチ ジョブをバッチ グループへと自動移行する セクションを参照してください。
優先順位に基づくバッチ スケジューリングの利点は次のとおりです。
- 優先順位はバッチ ジョブ レベルまで導入されます。
- これは、ダウンタイムがほぼゼロのサービスの前提条件として機能します。
- バッチ ジョブは特定のサーバーに関連付けされません。
次の手順では、 優先順位ベース のバッチ スケジュール機能を有効にするときに、バッチ グループ、ジョブ、タスクを操作する方法について説明します。
- 識別 – 既存のバッチ ジョブの優先順位を識別します。
- 有効化 – 機能管理における優先順位に基づくスケジューリングを有効にします。 既定では、既存のバッチ ジョブはすべて 通常 の優先順位を持っています。
- 更新 – 通常 の優先順位ではないジョブの優先順位を選択的に更新します (専用キャパシティ、重大、高、低 など)。
- 適用 – 一部のジョブのために優先順位を超えて容量を専用にする必要がある場合は、予約キャパシティを適用します。
バッチ グループ
バッチ グループを使用して、ジョブを論理的にグループ化し、既定のスケジュールの優先順位を設定します。 バッチ グループの例を次に示します:
- 特定の業務プロセスに属するジョブ
- 実行の繰り返しが同じジョブ (毎晩、毎週、毎月など)
- 優先順位が同じジョブ
バッチ グループの作成
- システム管理>設定>バッチ グループの順に移動します。
- 新規 を選択して、新しいバッチ グループを作成します。
- グループ フィールドで、そのバッチ グループに対して固有の名前を入力します。
- 説明フィールドで値を入力します。
- スケジューリング優先順位 フィールドで、バッチ グループ内のバッチ ジョブの既定のスケジューリング優先順位を選択します。
- 保存 を選択します。
バッチ ジョブ
バッチ ジョブは、自動処理のために送信するタスクのグループです。 バッチ ジョブは、[実行者] フィールドで選択したユーザーのセキュリティ資格情報を使用 して実行 されます。 バッチ ジョブを作成するには、次の手順に従います。
バッチ ジョブの作成
- システム管理>照会>バッチ ジョブ の順に移動します。
- 新規 を選択して、新しいバッチ ジョブを作成します。
- 職務明細書フィールドに値を入力します。
- 開始予定日時フィールドに、日時を入力します。
- 実行者フィールドで、バッチジョブの実行時にそのセキュリティ認証情報を使用するユーザーを選択します。 詳細については、バッチ管理者のセキュリティ ロール を参照してください。
- (省略可能)[ 監視カテゴリ ] フィールドで、監視中にジョブの種類を識別しやすくする値を選択します。
- (省略可能) [重大なジョブ ] オプションを [はい] に設定します。 詳細については、ユーザーを一括でインポートする または 重大としてバッチ ジョブを処理するときのワークフロー メッセージを構成する を参照してください。
- バッチ グループ フィールドで、ジョブのバッチ グループを選択します。
- (省略可能)[ スケジュールの優先順位を上書き する] オプションを [はい] に設定して、[ ジョブのスケジュール設定の優先順位 ] フィールドを使用できるようにします。
- (省略可能)[ ジョブ スケジュールの優先順位 ] フィールドで、バッチ グループに定義されている既定の優先度とは異なる既定の優先度を選択します。
- (省略可能)[ アクティブ期間 ] フィールドで、バッチ ジョブを実行できる時間範囲を選択します。 詳細については、有効なバッチ期間 を参照してください。
- 保存 を選択します。
バッチ ジョブへのタスクの追加
バッチ ジョブ ページの バッチ タスク セクションで、新規 を選択します。
タスク明細書フィールドに値を入力します。
[ 会社勘定 ] フィールドで、タスクを実行する会社を選択します。
クラス名 フィールドで、実行するプロセスを選択します。 CanGoBatchJournal プロパティが有効化されていると、クラスがリスト表示されます。
保存 を選択します。
バッチ タスクの詳細 クイックタブを展開して、バッチ タスクの設定をさらに追加するか、制約を追加します。
全般 タブで、タスクの失敗を無視する オプションを はい に設定して、タスクの失敗によってジョブが失敗しないように指定します。
最大再試行回数 フィールドで、試行が何回失敗した場合にタスクが失敗したと見なされるかを指定します。
ジョブを作成したユーザーのみがタスクを実行する必要がある場合は、[ プライベート ] オプションを [はい ] に設定します。 このオプションは、クライアント タスクにのみ適用されます。
選択したタスクの実行がそのジョブの先行タスクのステータスに依存すべき場合は、制約 タブで、新規 を選択します。
タスク ID フィールドで、先行タスクを選択します。
予定されたステータス フィールドで、現在のタスクを実行する前に先行タスクが到達する必要があるステータスを選択します。
保存 を選択します。
メモ
複数の条件または制約を入力し、依存タスクを実行する前にすべての条件を満たす必要がある場合は、条件の種類として [すべて ] を選択します。 いずれかの条件が満たされた後に依存タスクを実行できる場合は、条件の種類として [ 任意 ] を選択します。
バッチ タスクが入力パラメーターに対応している場合は、 パラメーター を選択し、続いてタスク固有のパラメーターを設定します。
OK を選択してから、保存を選択します。
バッチの予約キャパシティレベルを設定
システム管理>設定>システム パラメーターの順に移動します。
バッチ グローバル 設定 タブの バッチ専用のキャパシティ レベル フィールドで、 専用キャパシティ の優先度を持つバッチジョブ 専用のキャパシティ レベルを選択します。
- 専用キャパシティなし – この値が既定の値となります。
- 専用キャパシティ低 – 累積するバッチ スレッドの 10 パーセントが予約されています。
- 中程度の予約容量 – 累積バッチスレッドの15パーセントが予約されています。
- 専用キャパシティ高 – 累積するバッチ スレッドの 25 パーセントが予約されています。
たとえば、バッチ アプリケーション オブジェクト サーバー インスタンスが 10 で、各インスタンスが 12 スレッドで構成されています。 したがって、バッチ スレッドの累計数は 120 になります。 バッチ予約能力レベルを高い予約能力として構成すると、累計スレッドの 25 パーセント (つまり、30 スレッド) が、予約されたキューからのバッチ タスク処理専用になります。 これらの 30 のスレッドは、3 つの AOS インスタンスに割り当てられる必要があります。 したがって、10 の AOS インスタンスの 3 つが、予約されたキューの処理専用になります。 予約された能力で処理するバッチ タスクがない場合、それらの 3 つの AOS インスタンスはアイドル状態になります。
メモ
サンプル値は、説明のみを目的としています。 実際に割り当てられるキャパシティは、バッチサーバの設定と、任意時点で使用可能となるバッチスレッドの数によって異なります。 専用の X スレッドは、予約されたカテゴリで実行されるバッチ タスクが一定数にあるユース ケースが無い場合、構成することはできません。
保存 を選択します。
メモ
専用キャパシティは、 専用キャパシティ 優先度を持つバッチジョブのみに特化しています。 専用キャパシティは、未使用の専用キャパシティがあった場合でも、その他の 優先度が割り当てられているバッチジョブには利用できません。
新しい内部システムのバッチジョブである「期限切れのバッチハートビートレコードを整理するシステムジョブ」は、新しい BatchHeartbeatTable テーブルの内容を整理します。 このバッチジョブのクラス名は、 SysCleanupBatchHeartbeatTable です。 BatchHeartbeatTable は、オンライン ノード間で予約容量スレッドを決定、構成、分散するために使用される内部監視テーブルです。
ベスト プラクティス
すべてのバッチ ジョブが同じ優先順位を持たないように、優先順位を調整します。 たとえば、すべてのバッチ ジョブの優先度を高または重大に設定しないでください。 バッチの優先順位を構成するときは、次の分散を検討してください。
優先度 予約容量を除くバッチ ジョブの可能な配分の割合 低 10% ~ 50% 標準 15% ~ 35% 高 15% ~ 35% 重大 10% ~ 30% 常に 24 時間体制で優先順位の異なるジョブが混在するようにバッチ ジョブをスケジュールします。 たとえば、朝に標準、午後に高、夕方に重大、夜に低の優先度で、すべてのバッチ ジョブをスケジュールしないでください。
予約されたキューを予約されたキャパシティ優先で使用すると、バッチジョブ専用のリソースがあるように感じられます。 この動作を必要としない場合は、 予約容量 の優先順位にバッチ ジョブを割り当てないでください。
優先順位は、タスクを互いに順位付けしたり重ねたりすることではありません。 代わりに、優先度によって、タスクが実行のために選択される確率が決まります。
パフォーマンスの低下を排除するために、サーバー全体でスレッドの数を同じに保ちます。
SQL Server の一時的なエラーの問題を防ぐために、バッチ タスク用の BatchRetryable インターフェイスを実装します。 詳細については、SQL 一時接続エラーの再試行を参照してください。
バッチ タスクはべき等である必要があります。 実行回数に関係なく、同じ結果が得られます。 再試行回数が 0 (ゼロ) を超えるタスクを設定します。 この設定により、ジョブの実行中に発生する可能性があるどんな一時的なエラーからでもシステムを復旧できます。 詳細については、SQL 一時接続エラーの再試行を参照してください。
大規模なワークロードの場合は、10 分以内に実行および完了できるように、それらを小さなワークロードまたはタスクに分割します。
SQL Server トランザクションをバッチ タスク内でできるだけ小さくして、他のバッチ ジョブやユーザー アクティビティのパフォーマンスに影響を与える可能性のある SQL Server ブロックを発生させないようにします。
複数のバッチ グループを使用して優先順位ベースのバッチ スケジュールを利用し、バッチ グループ レベルで異なる優先順位を使用します。
開発マシンに接続してユーザー受け入れテスト (UAT) でバッチをデバッグする場合は、次のスクリプトを実行して、バッチ サーバーの残りの部分を無効にします。 このスクリプトを使用すると、すべてのバッチが開発マシン上で実行されます。
UPDATE ssc SET ssc.enablebatch = 0 FROM dbo.sysserverconfig ssc WHERE ssc.serverid = '<servername Tier2 batch server>'
バッチジョブをバッチグループへ自動移行する
この機能を有効にすると、タスクからジョブへバッチ グループ情報が複製されます。 システムは、ジョブ内のほとんどのタスクが使用するバッチ グループに基づいて、バッチ グループをジョブに割り当てます。
新規のバッチジョブ、 バッチ グループの関連付けをバッチ ジョブに設定するシステム ジョブ が移行の管理をします。 このバッチ ジョブでは、クラス名 SysMigrateBatchGroupsForPriorityBasedScheduling が使用されます。
バッチ 優先度ベースのスケジューリング 機能がオフになっている場合でも、システムは毎日午前 1 時にバッチ ジョブを実行します。 バッチジョブは、最後の実行以降に適用されるバッチジョブの差分を移行します。
また、この機能を有効にすると、システムはバッチ ジョブを実行して、前回の実行以降のすべてのバッチ ジョブを移行します。 移行バッチ ジョブの ID への参照に関する通知がシステムに表示されます。
機能を有効にして移行が完了したら、バッチ グループの自動割り当てを確認します。 この確認作業を容易にする目的で、タスクの バッチグループ フィールドは読み取り専用になっています。 下位互換性をサポートするために、新しいバッチ タスクを追加すると、このフィールドの値がジョブから伝達されます。
すべてのバッチ ジョブに高優先度または重大優先度を割り当てないでください。
バッチの同時実行
プラットフォーム アップデート 58 では、機能管理 の バッチの同時実行制御 機能を有効にすることができます。 この機能により、特定のバッチ ジョブで同時に実行できるタスク数を制限できます。 したがって、バッチ ジョブに優先順位を付け、リソースの利用を最適化することができます。 たとえば、優先順位の低いバッチ ジョブのタスク数を制限することで、システムの過負荷や、優先順位の高い他のバッチ ジョブのパフォーマンスに影響を与えること防ぐことができます。
重要
- この機能は、バージョン10.0.34 (PU 58) で、 (プレビュー) バッチ同時実行制御 として利用可能です。
- この機能は、10.0.38 (PU 62) から一般的に利用可能です。
- この機能は、バージョン 10.0.39 (PU 63) では既定で有効になります。
- この機能はバージョン 10.0.41 (PU 65) 以降では必須です。
前提条件
前提条件として、環境内で Batch Priority Based Scheduling 機能を 有効にします。
バッチの同時実行制御が必要となる理由
バッチ ジョブは、通常、データ処理、レポート作成、統合などのバックグラウンド タスクを実行します。 ただし、同時に実行されるバッチ タスクが多すぎると、パフォーマンスの問題やリソースの競合が発生する可能性があります。 たとえば、バッチ ジョブの 1 つが時間ごとに実行され、大量のデータが処理されます。 別のバッチ ジョブは 15 分おきに実行され、優先順位が高くなります。 バッチコンカレンシー制御がないと、優先順位の高いバッチ ジョブが、スムーズかつ時間的に実行するのに十分なリソースを確実に取得することはできません。
メモ
- コンカレンシー制御が必要ない場合は、[Batch グループ] ページの [最大コンカレンシー] フィールドを 0 (ゼロ) に設定します。
- この機能は、バッチ スケジュールのパフォーマンスが低下する可能性があるため、5,000 を超える同時実行タスクを実行できるバッチ ジョブには使用しないでください。
- 最大同時実行 の値が環境で使用できるバッチ スレッドの総数を超えると、この機能は無効になります。
- 最大同時実行 の値は、グループ内の各バッチ ジョブに適用されます。 バッチ グループの累計値ではありません。
バッチの同時実行制御をどのように使用しますか?
バッチコンカレンシー制御を使用するには、機能管理で (プレビュー) Batch コンカレンシー制御 機能を有効にします。 続いてに バッチ グループ に移動し、同時実行制限を適用するバッチ グループを選択します。 [Batch グループ] ページには、[最大コンカレンシー] という名前の新しいフィールドがあります。 選択したバッチ グループ内の各バッチ ジョブに対して同時に実行できるタスクの最大数を表す正の整数を入力します。 この設定は、バッチ グループに属するすべてのバッチ ジョブに適用されます。
たとえば、バッチグループの 最大同時実行 値を 10 に設定した場合、そのバッチグループ内のバッチジョブのタスクは 10 個しか同時実行できません。 ジョブの 10 個を超えるタスクが実行を待機している場合は、実行中のタスクの一部が完了するまでキューに入れられます。
最大同時実行 値 は、さまざまなバッチ グループにわたって実行できるタスクの数には影響されません。 同じバッチ グループ内のタスクにのみ適用されます。 コンカレンシー制御が必要ない場合は、 既定値である 0 (ゼロ) に設定します。
バッチ グループ内のすべてのバッチ ジョブを完全に一時停止する場合は、最大同時実行 フィールドを -1 に設定します。 値を -1 に設定する前にシステムによって選択されたタスクは、引き続き実行されます。