0

午前 2 時から午後 11 時 59 分まで 2 時間ごとにログ バックアップを実行するようにエージェント ジョブを設定しています (完全バックアップまたは差分バックアップを実行するためのウィンドウを残しています)。同様のジョブは、私の 50 ほどのインスタンスのすべてに設定されています。時間の経過とともに数百のインスタンスを追加する可能性があります (一部の顧客のために SQL Server をホストしています)。それらはすべて同じ SAN ディスク ボリュームにバックアップされます。これにより、レイテンシの問題が発生し、パフォーマンスに影響を与えています。

インスタンス 1 が 2:00、4:00 などにジョブを実行し、インスタンス 2 が 2:05、4:05 にジョブを実行するように、各インスタンスのジョブ実行時間を 5 分オフセットしたいと考えています。など、インスタンス 3 は 2:10、4:10 などに実行します。各インスタンスのジョブの開始時刻をずらした場合 (インスタンス 1 の場合は 2:00、インスタンス 2 の場合は 2:05、インスタンス 3 の場合は 2:10 など)、期待する結果が得られると合理的に期待できますか?すべてのインスタンスが同時にジョブを実行していませんか?

4

2 に答える 2

2

これが Twitter での会話と同じだとすると、SQL Server エージェントを n 分ごとまたは n 時間ごとに実行するように指定すると、次の実行は終了時間ではなく開始時間に基づいて行われます。したがって、インスタンス 1 でジョブを 2:00 に実行し、2 時間ごとに実行するように設定した場合、最初の実行に 1 分、12 分、45 分かかった場合でも、2 回目の実行は 4:00 に実行されます。

いくつかの注意事項があります:

  • 内部エージェントの同期により、わずかな遅延が発生する可能性がありますが、これが数秒以上遅れたことはありません
  • 2:00 の最初の実行に 2 時間以上(ただし 4 時間未満) かかる場合、次にジョブが実行されるのは 6:00 になります (4:00 の実行はスキップされ、4:00 には実行されません: 「追いつく」ための 10 または 4:20)

開始時間をオフセットするために WAITFOR を追加するという別の提案がありました (ランダム <> ユニーク)。インスタンスごとに異なる遅延 (1 分、2 分など) をハードコーディングする場合は、すべてのジョブにステップを追加するよりも、スケジュールを使用する方がはるかに簡単です。私見では。

于 2013-08-28T17:58:41.423 に答える
0

おそらく、「スケジュール」を管理する集中型 DB をセットアップし、実行時にジョブに行を追加/更新させることができます。このようにして、後続の各サーバーは、いつ開始できるかを「ポーリング」するジョブを開始できます。このようにして、ジョブの遅延によって他のジョブが待機するようになるため、サーバーの 1 つがオフになったときにタイミングに不均衡が生じることはありません。

少し偏執的であるため、ジョブが実行されないほど遅延が発生しないように、「x」分間待ってから続行するという包括的なシナリオを追加します。

于 2013-08-28T17:42:17.153 に答える