3.7.5. ジョブのスケジューリングの設定
タスクマネージャーは、スケジュールする必要があるタスクを定期的に収集して、どのインスタンスに容量があり、タスクを実行可能かを判断します。タスクマネージャーのワークフローは、以下の通りです。
- 制御インスタンスと実行インスタンスを見つけて割り当てます。
- ジョブのステータスを更新して、待機中にします。
-
ディスパッチャーがタスクを取得して実行を開始できるように、
pg_notifyを介してコントロールノードにメッセージを送信します。
スケジューリングタスクが TASK_MANAGER_TIMEOUT 秒 (デフォルトは 300 秒) 以内に完了しない場合、タスクは早期に終了します。タイムアウトの問題は通常、保留中のジョブが多数存在する場合に発生します。
タスクマネージャーが一度に実行できる作業量を制限する方法の一つに、START_TASK_LIMIT 設定があります。これにより、1 回の実行で開始できるジョブの数が制限されます。デフォルトは 100 ジョブです。さらに保留中のジョブがある場合は、新しいスケジューラータスクが直後に実行されるようにスケジュールされます。ジョブの起動から実行開始までの遅延が多少長くなっても構わないが、全体的なスループットを向上させたいユーザーは、START_TASK_LIMIT を 増やすことを検討できます。タスクマネージャーの個々の実行にかかる時間を確認するには、/api/v2/metrics で利用可能な Prometheus メトリクス task_manager__schedule_seconds を使用します。
タスクマネージャーによって実行の開始が選択されたジョブは、タスクマネージャープロセスが終了して変更がコミットされるまで実行されません。TASK_MANAGER_TIMEOUT 設定は、タスクマネージャーが変更をコミットするまでに、1 回の実行でどれくらいの時間実行されるかを決定します。タスクマネージャーは、タイムアウトに達すると進捗状況をコミットしようとします。タスクは、猶予期間 (TASK_MANAGER_TIMEOUT_GRACE_PERIOD で指定) が経過するまで、強制的に終了させられることはありません。