序文MySQL には、REDO ログ、UNDO ログ、バイナリ ログ、エラー ログ、スロー クエリ ログ、一般ログ、リレー ログの 6 種類のログ ファイルがあります。 その中で、REDO ログとロールバック ログはトランザクション操作と密接な関係があり、バイナリ ログもトランザクション操作と一定の関係があります。これら 3 つのログは、MySQL でのトランザクション操作を理解する上で非常に重要です。
【ログ取り消し】トランザクションが開始する前に、現在のトランザクション バージョンの UNDO ログを生成します (ヒント: UNDO ログは、UNDO ログの信頼性を確保するために REDO ログも生成します)。 トランザクションがコミットされた後、UNDO ログはすぐに削除されず、リンク リストに格納されてクリーンアップされます。パージ スレッドは、UNDO セグメント内のテーブルで前のトランザクションより前のバージョン情報を他のトランザクションが使用しているかどうかを判断し、UNDO ログのログ領域をクリーンアップできるかどうかを決定します。 データベース トランザクションの 4 つの主要な特性の 1 つは、原子性です。具体的には、原子性とは、データベースに対する一連の操作が完全に成功するか、完全に失敗するかのいずれかであることを意味します。部分的な成功はあり得ません。 実際、基礎となるアトミック性は、UNDO ログを通じて実現されます。 UNDO ログは主にデータの論理的な変更を記録します。たとえば、INSERT ステートメントの場合、対応する DELETE UNDO ログがあります。各 UPDATE ステートメントには、対応する反対の UPDATE UNDO ログがあります。このようにして、エラーが発生した場合、トランザクション前のデータ状態をロールバックできます。たとえば、ユーザー テーブルの元のレコードは次のようになります。
同時に、UNDO ログは MVCC (マルチバージョン同時実行制御) の実装の鍵でもあります。 【REDOログ】MySQL はどのようにしてトランザクションの永続性を確保するのでしょうか?最も簡単な方法は、トランザクションがコミットされるたびに、トランザクションに関係するすべての変更されたデータ ページをディスクに更新することです。ただし、そうすると、主に次の 2 つの点で重大なパフォーマンス上の問題が発生します。
そのため、MySQL は REDO ログ メカニズムを設計し、WAL (Write-Ahead Logging) テクノロジを通じてパフォーマンスを最適化しました。 WAL の中核は、最初にシーケンシャル IO でログ ディスクに書き込み、次にランダム IO でデータ ディスクに書き込むことで、ランダム ディスク書き込みの IO 消費を節約します。 MySQL は、DML ステートメントを実行するたびに、まずレコードを順番に REDO ログ バッファに追加し、メモリ内のデータを更新します。次に、アイドル スレッドがある場合、メモリが不足している場合、または REDO ログがいっぱいの場合、永続性を保つためにレコードをバッチでディスクに書き込みます。 【バイナリログ】Binlog は MySQL の論理ログであり、サーバー層によって記録されます。任意のデータベース エンジンの書き込み操作 (クエリを除く) 情報を記録し、バイナリ形式でディスクに保存されます。 実際のアプリケーションでは、binlog は主にマスター スレーブ レプリケーションとデータ回復の 2 つのシナリオで使用されます。
データ更新プロセス中に、システムに障害が発生して異常再起動した場合、トランザクションの永続性とアトミック性をどのように保証できますか?概要は次のとおりです。
上記の簡略化された UNDO ログ、REDO ログ、および binlog 書き込みプロセスに基づいて、原子性、永続性、一貫性の信頼性保証を整理してみましょう。 A) ステップ 1/2/3 のいずれかで障害が発生した場合、リカバリ後に、REDO ログに未完了のレコードがないことがわかります。リカバリ後は、シーンを復元するために UNDO ログをロールバックするだけで済みます。 B) ステップ 4 または 5 のいずれかのステップで障害が発生し、障害回復後に REDO ログが準備状態にあることが判明した場合は、さらにそれが binlog に書き込まれているかどうかを判断します。
C) ステップ 6 で障害が発生した場合、リカバリ後に、REDO ログがコミットされた状態になっていることが確認され、プロセスが正常に完了したことが示されるため、何もする必要はありません。 要約するこれで、MySQL の undo、redo、binlog の違いに関するこの記事は終了です。MySQL の undo、redo、binlog の違いの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: IE6/7 における a.getAttribute(href,2) 問題の分析と解決
>>: フレックスレイアウトは、上下固定、中間スライドのレイアウトモードを実現します。
CSS3 では、transform 関数を使用して、テキストや画像の回転、拡大縮小、傾斜、移動という...
以前、Docker コンテナとローカル マシン間のファイル転送に関する記事を書きました。しかし、この...
最近、携帯電話で https が有効になりました。緑色のロックを取得するには、次の問題を解決する必要...
ネットワークの問題のトラブルシューティング、新しい接続のセットアップ、ファイアウォールの構成を行うと...
2005年に業界に入ってから数か月後、労働者の日休みの期間中、1か月以上毎日12時まで残業をしました...
クイックリーディングSQL ステートメントを監視する必要があるのはなぜか、監視方法と監視手段について...
目次1. 準備2. 展開プロセス3. アクセステストHalo は、ブログに慣れている学生に追加のオプ...
1. はじめにCentOS8 システムの更新、新しいバージョンは人々に非常に快適に感じさせます。 こ...
目次1. ストアドプロシージャに関連する概念2. ストアドプロシージャの使用1) ストアドプロシージ...
目次原理ソースコード分析委任されたイベントバインディングすべてのサポートされているイベントを聴くネイ...
目次1. はじめに2. 詳しい説明2.1、非同期2.1.1. 関数はPromise以外のオブジェクト...
<fieldset>と<legend>については、ほとんどの人はおそらく馴染...
まず、ページにビデオを埋め込むための HTML コードは次のとおりです。コードをコピーコードは次のと...
iノードとは何ですか? inode を理解するには、まずファイル ストレージから始める必要があります...
初めての投稿ですので、間違いや問題点などありましたら、コメント欄で指摘していただければ、今後改善させ...