2

Aries アルゴリズムは、分析フェーズ後に元に戻すトランザクションを既に知っている場合、元に戻す前にやり直しを適用するのはなぜですか?

ディスクにフラッシュされたデータがクラッシュ時にトランザクションを元に戻すことと同じではない可能性があることを考えると、Lsn番号と一貫性を維持することに関係があることを私は知っています(ダーティのため)ページ)、しかし、この質問に対する「正式な」回答は見つかりません(少なくとも私が理解できるものは1つです)。

4

8 に答える 8

6

トランザクションがコミットされても、バッファにフラッシュされていないページが存在する可能性があるためです。ARIES はバッファ マネージャでno-forceを使用します。やり直すと、トランザクション テーブルとダーティ ページ テーブルがクラッシュ時の状態に戻ります。これにより、成功したトランザクションを安定したストレージに反映できます。

于 2012-05-24T20:22:59.413 に答える
4

簡潔な答え:

元に戻すパスを実行する前に、データベースの一貫性を確保するために、やり直しパスですべての履歴クラッシュを繰り返す必要があります。

長い答え:

リカバリ アルゴリズム ARIESは、DBMS の原子性と耐久性を確保するために、次の 3 つのパスを実行します。

  1. 分析パス:何をする必要があるかを確認します(ログを前方に再生します)
  2. Redo pass : ログにはあるがディスク上にない更新をディスクが反映していることを確認します。これには、最終的にロールバックされるトランザクションに属するものも含まれます。このようにして、一貫した状態にあることが保証され、論理的な元に戻すことができます。
  3. 元に戻すパス: 負けたトランザクションのアクションを削除します

UNDO データ ログは論理的ですが、REDO データ ログは物理的です。

  • データベースが一貫した状態にあることを保証できないため、物理的な REDO を実行する必要があります (たとえば、「INSERT VALUE X INTO TABLE Y」をログに記録することはお勧めできません。X はインデックスに反映される可能性がありますが、挿入中にクラッシュが発生した場合に備えて、テーブルではなく、またはその逆)
  • 論理的な UNDO を実行できます。REDO の後は、一貫性があることがわかっているからです。実際、一部のアクションのみを UNDO するため、論理 UNDO を実行する必要があります。また、「インデックス y のページ x を分割する」などの形式の UNDO の物理的なログ記録は、インデックス管理または不変の観点から、もはや正しいことではない可能性があります。メンテナンス。履歴を繰り返してすべてを再生するため、再実行中にこれを心配する必要はありません。つまり、前回データベースに加えられた物理的な変更はすべて正しいままです。

ソース

于 2013-04-12T03:36:43.457 に答える
1

aries が何であるかはわかりませんが、他のデータベースと同じであると仮定します。

いくつかのベース バックアップから開始して、REDO ログが適用されます。これは基本的に、バックアップ後、クラッシュが適用される前に発生したすべてのデータ変更ステートメントを意味します。そうしないと、最後のバックアップ以降に発生したすべてが失われます。

それが完了すると、未完了のトランザクションはすべてロールバックされます。これは、それらのトランザクションを取得して完了する人がいないためです。

于 2012-04-23T22:30:03.627 に答える
0

どのトランザクションを元に戻す必要があるかを正確に把握するために、失敗時の状態に戻す必要があります。頭に浮かぶのは、失敗の連続です。クラッシュから回復するときの正確な障害。回復中に、ログにアクションを書き込みます。プロセスの回復中に失敗した場合は、ログ内のすべての操作を REDO します (最後の試行中に書き込まれた UNDO 操作も含まれます!!)。

特殊なケースや特殊なケースの特殊なケースを処理する必要がないため、単純なアルゴリズムを提供します。リカバリ中にクラッシュが発生した後、リカバリ中にクラッシュがなかったかのように同じ状態に戻ることが保証されています。

于 2012-04-23T23:02:41.857 に答える
0

レコードレベルのロックをサポートしていない場合は、勝者トランザクションのみをやり直す選択的やり直しを使用できます。それ以外の場合は、元に戻す前に履歴を繰り返す(すべてやり直す)ことをお勧めします

于 2012-11-29T15:06:55.273 に答える
0

ARIES の目標の 1 つは単純化です。やり直しの後の取り消しは必要ないかもしれませんが、やり直しの前に取り消しを行うより複雑なスキームよりも、アルゴリズムの正しさをより明確にします。

于 2015-02-26T03:56:38.600 に答える
0

リドゥとアンドゥの間に実際に何が行われたかを考えることができます。終了したログによると、やり直しは履歴を繰り返しています。対照的に、元に戻すとは、新しい CLR ログ レコードを作成することです。システムがクラッシュすると、コミットされていない xacts に関する記録がログに記録されます。元に戻さないと、CLR ログ レコードが存在しないため、不整合が発生します。

于 2015-02-25T03:41:36.850 に答える