ARIES アルゴリズムでは、再実行パスでクラッシュする前にすべての履歴を繰り返す必要があるのはなぜですか? 分析パス中にコミットされたトランザクション番号を取得してから、コミットされたトランザクション ログ レコードをやり直すことはできますか? このメソッドは、やり直しと元に戻す必要があるレコードの数を減らします。
質問する
1149 次
2 に答える
3
簡潔な答え:
元に戻すパスを実行する前にデータベースの一貫性を確保するために、再実行パスでクラッシュの前にすべての履歴を繰り返す必要があります。
長い答え:
リカバリ アルゴリズム ARIESは、DBMS の原子性と耐久性を確保するために、次の 3 つのパスを実行します。
- 分析パス:何をする必要があるかを確認します(ログを前方に再生します)
- Redo pass : ログにはあるがディスク上にない更新をディスクが反映していることを確認します。これには、最終的にロールバックされるトランザクションに属するものも含まれます。このようにして、一貫した状態にあることが保証され、論理的な元に戻すことができます。
- 元に戻すパス: 負けたトランザクションのアクションを削除します
UNDO データ ログは論理的ですが、REDO データ ログは物理的です。
- データベースが一貫した状態にあることを保証できないため、物理的な REDO を実行する必要があります (たとえば、「INSERT VALUE X INTO TABLE Y」をログに記録することはお勧めできません。X はインデックスに反映される可能性がありますが、挿入中にクラッシュが発生した場合に備えて、テーブルではなく、またはその逆)
- 論理的な UNDO を実行できます。REDO の後は、一貫性があることがわかっているからです。実際、一部のアクションを UNDO するだけなので、論理 UNDO を実行する必要があります。また、「インデックス y のページ x を分割する」などの形式の UNDO の物理的なログ記録は、インデックス管理または不変の観点から、もはや正しいことではない可能性があります。メンテナンス。履歴を繰り返してすべてを再生するため、再実行中にこれを心配する必要はありません。つまり、前回データベースに加えられた物理的な変更はすべて正しいままです。
于 2013-04-12T02:35:37.083 に答える
0
その理由は、ARIES が無力/盗みのアプローチで機能するように設計されているためです。「スチール」の部分は、コミットされていないトランザクションからの変更がディスクに書き込まれる可能性があることを意味します。したがって、コミットされたトランザクションとコミットされていないトランザクションの両方をやり直す必要があるため、コミットされていないトランザクションを元に戻すことができます。
于 2012-12-07T15:55:01.043 に答える