Oracle Databaseのコミットvs高速コミットvsコミットアウト


12

Oracle Databaseに関連するこれら3つの用語の違いについて、誰かが私の理解を検証できるかどうか疑問に思っていました。

多くの情報源はこれらの用語を混同し、それらを詳細に説明していないため、情報を見つけるのは少し難しいものでした。

私が収集したものから:

  1. コミットと高速コミットはまったく同じです。すべてのコミットは高速コミットです。
  2. 基本的に、高速コミットは、元に戻す/ロールバックセグメントヘッダーのトランザクションテーブルのフラグを更新するだけで、トランザクションがコミットされたことを示します。ただし、実際のブロックは再検討されません。つまり、データブロックのヘッダーにある対象トランザクションリスト(ITL)のUNDOバイトアドレス(UBA)は、対応するUNDOセグメントのトランザクションテーブルを指します。さらに、対応する行のロックバイトは解放されず、ITLのロックカウントは変更されません(行はロックされたままです)。
  3. コミットクリーンアウトでは、ブロック再訪され、ITLがコミットSCNで更新されます。ただし、ITLのロックカウントと各行に格納されているロックバイトはまだ更新されず(高速コミットのように行はロックされたままです)、ブロックが変更されても、REDOは生成されません。
  4. 正常にコミットされた(==高速コミットされた)ブロックは、次にタッチされたときに遅延ブロッククリーンアウトを実行します(そしてREDOを生成します)。
  5. コミットクリーンアウトが行われたブロックは、次にタッチされたときに遅延ログブロッククリーンアウトが行われます(そして、REDOが生成されます)。

誰かがこれらのポイントを検証できることを願っています!ありがとう!

回答:


6

あなたには基本的な権利があります。コミットのタイプは1つのみです(通常高速 ...はありません)。

概念ドキュメントから:

トランザクションがコミットされると、次のアクションが発生します。

  • システム変更番号(SCN)がCOMMIT用に生成されます。

    関連するUNDO表領域の内部トランザクション表は、トランザクションがコミットしたことを記録します。トランザクションの対応する一意のSCNが割り当てられ、トランザクション表に記録されます。「シリアル化可能な分離レベル」を参照してください。

  • ログライター(LGWR)プロセスは、REDOログバッファ内の残りのREDOログエントリをオンラインREDOログに書き込み、トランザクションSCNをオンラインREDOログに書き込みます。このアトミックイベントは、トランザクションのコミットを構成します。

  • Oracle Databaseは、行および表に保持されているロックを解放します。

    コミットされていないトランザクションによって保持されているロックを待機してキューに入れられたユーザーは、作業を進めることができます。

  • Oracle Databaseはセーブポイントを削除します。

  • Oracle Databaseは、コミットのクリーンアウトを実行します。

    コミットされたトランザクションのデータを含む変更されたブロックがまだSGAにあり、他のセッションがそれらを変更していない場合、データベースはブロックからロック関連のトランザクション情報を削除します。理想的には、COMMITはブロックを消去して、後続のSELECTがこのタスクを実行する必要がないようにします。

そのため、ブロックがまだSGAにある場合、コミット中にクリーンアウト(REDOでフル)が実行されます。

アクティブなシステムでは、コミットされていないトランザクションを持つブロックがディスクに書き込まれ、SGAからフラッシュされるのが一般的です。この場合、ブロックはそのまま残され、ブロックに触れる次のクエリは遅延ブロッククリーンアウトを実行します(ポイント5はすべての場合に発生するわけではありません)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.