SQL インスタンス内のすべてのデータベースのジョブを作成するジョブがあります。ジョブを順番に実行したくありません。一度に複数のデータベースを実行する必要がありますが、同時に実行するデータベースが多すぎて、サーバーのパフォーマンスが低下する可能性があることも確認したいと考えています。
同時に実行できる同時実行ジョブの数を指定する方法や、アクティブなジョブの数が指定した数より少なくなるまで新しいジョブが開始されないようにジョブを管理する方法はありますか?
SQL インスタンス内のすべてのデータベースのジョブを作成するジョブがあります。ジョブを順番に実行したくありません。一度に複数のデータベースを実行する必要がありますが、同時に実行するデータベースが多すぎて、サーバーのパフォーマンスが低下する可能性があることも確認したいと考えています。
同時に実行できる同時実行ジョブの数を指定する方法や、アクティブなジョブの数が指定した数より少なくなるまで新しいジョブが開始されないようにジョブを管理する方法はありますか?
SQL コマンドと並行して実行するジョブの数 [n] を受け入れるストアド プロシージャを作成し、n 個のジョブを作成して開始し、ループに入って msdb テーブルをポーリングして、上記のジョブはまだ実行されており、アクティブな (または残っている) ジョブが n 未満であることに気付くたびに、データベースのセット全体が処理されるまで新しいジョブを開始できます。次に、呼び出しプロセスがすべてが処理されたことを認識できるように、最後のプロセスが終了するまで待機する必要があります。
ヒント: - sp_add_job によって返された @job_id を使用して、ジョブがまだ実行されているかどうかを確認します - システム テーブルで WITH (NOLOCK) を使用して、不要なロックを回避します。検索時に「ダーティ リード」を使用するかどうかは問題ではありませんジョブの状態について - WAITFOR DELAY を使用して、テーブルを 5 秒ごとにチェックするだけです。