MySQL Undo ログと Redo ログの概要

MySQL Undo ログと Redo ログの概要

元に戻すログ

データベース トランザクションが開始される前に、変更されるレコードが Undo ログに保存されます。トランザクションがロールバックされるか、データベースがクラッシュすると、Undo ログを使用して、コミットされていないトランザクションがデータベースに与えた影響を元に戻すことができます。

UNDOログの生成と破棄

Undo ログはトランザクションの開始前に生成されます。トランザクションがコミットされても、Undo ログはすぐには削除されません。InnoDB はトランザクションに対応する Undo ログを削除リストに入れ、バックグラウンド パージ スレッドによってリサイクルされます。
Undo ログは、変更プロセスを記録する論理ログです。たとえば、削除が実行されると、undolog は挿入を記録し、更新が実行されると、undolog は反対の更新を記録します。

UNDOログの保存

UNDO ログはセグメント単位で管理され、記録されます。 InnoDB データ ファイルにはロールバック セグメントが含まれており、このロールバック セグメントには 1024 個の UNDO ログ セグメントが含まれています。 UNDO ログの保存は、次のパラメータ セットによって制御できます。

'%innodb_undo%' のような変数を表示します。

元に戻すログ機能

トランザクションの原子性の実装

Undo Log は、トランザクションのアトミック性を実現するために作成された製品です。トランザクション処理中にエラーが発生した場合、またはユーザーが ROLLBACK ステートメントを実行した場合、MySQL は Undo ログ内のバックアップを使用して、トランザクション開始前の状態にデータを復元できます。

マルチバージョン同時実行制御 (MVCC) の実装

Undo ログは、MySQL InnoDB ストレージ エンジンでマルチバージョン同時実行制御を実装するために使用されます。トランザクションがコミットされる前に、Undo ログに以前のバージョンのデータが保存されます。Undo ログのデータは、他の同時トランザクションによるスナップショット読み取り用のデータの古いバージョンのスナップショットとして使用できます。

トランザクション A は手動でトランザクションを開始し、更新操作を実行します。まず、更新によってヒットしたデータが Undo バッファーにバックアップされます。
トランザクション B は手動でトランザクションを開き、クエリ操作を実行します。Undo ログ データを読み取り、スナップショット読み取り用に返します。

やり直しログ

トランザクションで変更されたデータを指します。最新のデータ バックアップが保存される場所 (Redo ログ) は、REDO ログと呼ばれます。

REDOログの生成と解放

トランザクション操作が実行されると、REDO ログが生成されます。トランザクションがコミットされると、生成された REDO ログはログ バッファーに書き込まれますが、トランザクションがコミットされたときにすぐにディスク ファイルに書き込まれるわけではありません。
トランザクション操作のダーティ ページがディスクに書き込まれると、Redo ログの使命は完了し、Redo ログが占めていた領域を再利用できます (上書きされます)。

Redoログの仕組み

Redo Log は、トランザクションの永続性を実現するために作成された製品です。障害発生時にテーブルのibdファイルに書き込まれていないダーティページが存在する状況を防ぐために、MySQLサービスの再起動時にRedoログに基づいてデータを再実行し、ディスクに書き込まれていないトランザクションデータを永続化する機能を実現します。

REDOログ書き込みメカニズム

Redo ログ ファイルの内容は、順次ループでファイルに書き込まれます。ファイルがいっぱいになると、最初のファイルに戻って上書きされます。

write pos は現在のレコードの位置です。書き込み中は後方に移動します。最後のファイルの末尾に書き込んだ後、ファイル 0 の先頭に戻ります。
チェックポイントは消去される現在の位置であり、後方に移動され、循環的に実行されます。レコードを消去する前に、レコードをデータ ファイルに更新する必要があります。
書き込み位置とチェックポイント間の空きスペースは、新しい操作を記録するために使用できます。書き込み位置がチェックポイントに追いついた場合、それは満杯であることを意味します。この時点では、新しい更新は実行できません。チェックポイントを進めるには、停止して一部のレコードを消去する必要があります。

Redoログ関連の設定パラメータ

各 InnoDB ストレージ エンジンには少なくとも 1 つの REDO ログ ファイル グループがあり、各ファイル グループには少なくとも 2 つの REDO ログ ファイル (デフォルトは ib_logfile0 と ib_logfile1) があります。以下のパラメータセットを通じてREDOログの保存を制御できます。

'%innodb_log%' のような変数を表示します。

RedoバッファをRedoログに永続化するための戦略は、Innodb_flush_log_at_trx_commitを通じて設定できます。

0: 再実行バッファが 1 秒ごとにコミットされ、OS キャッシュにキャッシュがフラッシュされ、ディスクに書き込まれるため、1 秒以内にトランザクション データが失われる可能性があります。この操作は、バックグラウンド マスター スレッドによって 1 秒ごとに実行されます。
1 (デフォルト): トランザクションのコミットごとに、Redo バッファ -> OS キャッシュ -> キャッシュをディスクにフラッシュが実行されます。これは最も安全な方法ですが、パフォーマンスは最も低くなります。
2: トランザクションがコミットされるたびに、Redo バッファ -> OS キャッシュが実行され、その後、バックグラウンドのマスター スレッドが 1 秒ごとに OS キャッシュ -> キャッシュをディスクにフラッシュを実行します。

MySQL がクラッシュしてもデータは失われず、サーバー全体がクラッシュした場合にのみ 1 秒分のトランザクション送信データが失われるため、通常は値 2 を選択することをお勧めします。

以上がMySQL Undo LogとRedo Logの詳細な概要です。MySQL Undo LogとRedo Logの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQL の redo ログと binlog の違いを 1 つの記事で理解する
  • MySQL における redo ログと binlog の違い
  • MySQL の undo、redo、binlog の違いを簡単に分析します
  • Redo ログと Undo ログに基づく MySQL クラッシュ回復の分析
  • MySQLのREDOログとUNDOログの詳細な説明
  • MySQL 8.0 redo ログの詳細な分析
  • MySQL シリーズ: redo ログ、undo ログ、binlog の詳細な説明
  • MySQLのREDOログ(リドゥログ)とロールバックログ(アンドゥログ)の詳しい説明
  • MySQL redo logの詳細な理解 redo log

<<:  DOCTYPE 文書型宣言 (Web ページ愛好家必読)

>>:  Dockerはコンテナに入るためにルートを使用する

推薦する

Oracle の MySQL バージョンでユーザー Scott のテーブル ステートメントを作成する例

概要: Oracle scottユーザーには4つのテーブルがあり、実験やデータ検証に便利です。現在は...

MySQL ツリー構造テーブルの設計と最適化に関する簡単な説明

序文多くの管理・オフィスシステムでは、ツリー構造がいたるところで見られます。たとえば、「部門」や「機...

CocosCreatorオブジェクトプールの使い方

目次序文:特定の操作ステップ1: プレハブを準備するステップ2: オブジェクトプールを初期化するステ...

ネイティブ js で呼び出し、適用、バインドを実装する方法

1. 呼び出しを実装するステップ:関数をオブジェクトのプロパティとして設定します。これを関数に割り当...

mysqldumpデータエクスポートの問題に関する詳細な議論

1. mysqldump の使用時にエラー (1064) が報告されます。これは、mysqldump...

Vue ElementUI で Excel ファイルを手動でサーバーにアップロードする方法の詳細な説明

目次概要プロパティ設定処理ロジック概要具体的な需要シナリオは次のとおりです。 Excel ファイルを...

HTMLを使用して、IPを制限する投票ウェブサイトの不正行為スキームを実装する

これは、IP アドレスが制限されている投票 Web サイトの不正行為の手口です。この方法は、投票 W...

Nginx 急ぎ購入 電流制限構成 実装分析

ビジネス上のニーズにより、急ぎの購入が発生することが多いため、ロード バランシング フロント エンド...

Reactは二次的連鎖効果(階段効果)を実現する

この記事では、二次リンク効果を実現するためのReactの具体的なコードを参考までに共有します。具体的...

Vueルーティングナビゲーションガードの簡単な理解

目次1. グローバルガード1. グローバル前線警備2. グローバル解像度ガード3. グローバルポスト...

WeChatミニプログラムをTencent Mapsに接続する2つの方法

最近、WeChat アプレットを作成しているのですが、いくつか問題が発生しました。インターネットでい...

Dockerはnextcloudを使用してプライベートBaiduクラウドディスクを構築します

突然、ドキュメントの保存と共同作業のためのプライベート サービスを構築する必要がありました。多くの場...

MySQL データ圧縮パフォーマンス比較の詳細

目次1. テスト環境1.1 ハードウェアとソフトウェア1.2 テーブル構造2. テストの目的2.1 ...

非常に詳細な MySQL8.0.22 のインストールと設定のチュートリアル

みなさんこんにちは。今日は、MySQL 8.0.22 のインストールと構成について学習します。注意深...

JavaScript イベント ループのケース スタディ

js のイベント ループJavaScript はシングルスレッドなので、同じイベントで実行できるメソ...