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はコンテナに入るためにルートを使用する

推薦する

フォームアクションとonSubmitの例

まず、action はフォームの属性です。HTML5 では必須の属性値として定義されています。onS...

WeChatアプレット仮想リストの応用例

目次序文仮想リストとは何ですか?デモ効果準備スクリーンの高さとボックスの高さ最適化要約する序文人気の...

MySQLデータベースを定期的に自動バックアップする方法

データは貴重なものであることは誰もが知っています。データをバックアップしなければ、データをそのまま放...

MySQL スケジュール データベース バックアップ (フル データベース バックアップ) の実装

目次1. MySQLデータのバックアップ1.1. データをバックアップするためのmysqldumpコ...

mysql5.7.18のインストールと初期パスワードの変更方法

CentosでのMySQLのインストールについては、以前の記事を参照してください。 Centos7....

W3C組織はHTML4のスタイルに関する推奨事項を提供しています

これは、W3C 組織が HTML4 に対して提示したスタイル推奨事項です。残念ながら、ブラウザが独自...

JS で単一ファイルコンポーネントを実装する方法

目次概要単一ファイルコンポーネント基本概念シンプルなローダーコンポーネントコンテンツの解析コンポーネ...

MySQL 起動エラー InnoDB: ロックできません/ibdata1 エラー

OS X 環境で MySQL を起動すると、エラー メッセージが表示されます。 016-03-03T...

Dreamweaver8を使用してウェブサイトのファイルをチェックして整理する方法

Dreamweaver8 を使用して独自の Web サイトを作成する目的は何ですか?インターネットに...

Centos8環境でSSHポート番号を変更する方法

目次序文始める序文サーバーのデフォルトの SSH ポート番号は通常 22 であるため、ほとんどのユー...

MySQL データ型 DECIMAL の使用方法の詳細な説明

MySQL DECIMALデータ型は、データベースに正確な数値を保存するために使用されます。会計シス...

Centos7 FFmpeg オーディオ/ビデオ ツールのインストールに関する簡単なドキュメント

ffmpeg は非常に強力なオーディオおよびビデオ処理ツールです。公式 Web サイトは http:...

画像を使用してハイパーリンクのパーソナライズされた下線を実現します

画像内に下線付きのリンクが表示されても驚かないでください。実はとても簡単なので、あなたにもできるので...

フロントエンドAIカットのコツ(体験談)

AI 画像の切り取りは PS と連携する必要があります。まず、スライスするレイヤーを選択し、それを...

Centos6.5 の rpm パッケージから mysql5.7 をインストールするときに発生する初期化エラーの解決策

1. rzをサーバーにアップロードして解凍する rz [root@mini2 アップロード]# ta...