1

トランザクションがタイムスタンプ順序付けプロトコルでロールバックされると、新しいタイムスタンプが与えられるのはなぜですか? 古いタイムスタンプを保持しないのはなぜですか?

4

3 に答える 3

6

操作がタイムスタンプ ベースであるスケジューラについて話している場合、ロールバックされたトランザクションが「古い」タイムスタンプで「スケジューリング キューに再入力」することが許可されていた場合、正味の効果として、スケジューラは即座にそのトランザクションからのすべてのリクエストの優先順位が最も高く、THAT の最終的な影響は、そのトランザクションをロールバックさせた問題がほぼ瞬時に再表示され、おそらく新しいロールバックを引き起こし、新しい「スケジュールへの再入力」を引き起こす可能性があることです。キュー」など

または、「キューにすぐに再入力する」ことの最終的な影響は、他のすべてのトランザクションが停止することです。

郵便局の人の列を考えてみてください。誰かがサービスを提供できない要求を持っていて、その人は (後ろではなく) 前の列にすぐに再入場することを許可されました。では、あなたの番になるまでにどれくらいかかりますか?

于 2011-05-26T13:11:54.470 に答える
2

新しいタイムスタンプでコミットされた他のトランザクションが存在する可能性があるため

  • 最初のタイムスタンプは X です
  • トランザクション T1 の開始
  • T1 は、タイムスタンプを X+1 の値にインクリメントして割り当てます
  • トランザクション T2 の開始
  • T2 は、タイムスタンプを X+2 の値にインクリメントして割り当てます
  • T2 コミット
  • T1 ロールバック

T1 がタイムスタンプを X にロールバックすると、3 番目のトランザクションが T2 の割り当てられた値との競合を生成します。インクリメントとシーケンスについても同様です。モノリシックなシーケンス値 (ギャップなし) が必要な場合は、トランザクションをシリアル化する必要があり、パフォーマンスが低下します。

于 2011-05-26T15:30:17.530 に答える