コンセプト紹介: MySQL の redo ログにはトランザクションの動作が記録されることはご存じのとおりです。サーバーがクラッシュした場合、トランザクションをやり直すことでデータを復元できます。ただし、トランザクションをロールバックする必要がある場合があります。つまり、現在の状況になる前のトランザクションの状態を知る必要があります。この場合、undo ログが役立ちます。つまり、UNDO ログは、データを変更前の状態に復元するために使用されます。したがって、データベースを変更する場合、このプロセスで REDO ログと UNDO ログが生成されることを知っておく必要があります。 保管場所: また、REDO ログは一般に ib_log と呼ばれる REDO ログ ファイルに配置され、UNDO ログはデータベース内の「セグメント」に格納されることもわかっています。この概念については、8 月 21 日の記事で説明しました。忘れてしまった方は、戻って確認してください。UNDO ログ セグメントは、共有テーブルスペースにあります。 ロールバック操作: さて、私たちはすでにundoの概念を知っています。undoは実際には共有テーブルスペース内の領域です。その主な機能は、トランザクションを変更が行われる前の状態に復元することです。ただし、リカバリ状況は一般的に2種類に分かれており、1つは論理リカバリ、もう1つは物理リカバリです。ここで強調する必要があるのは、undoリカバリは論理リカバリであるということです。つまり、100万個のデータを挿入すると、InnoDBは新しいデータページを割り当ててこのデータを保存し、トランザクションがロールバックされると、undoの機能はデータページをリサイクルするのではなく、これらの挿入操作を削除操作に変更してロールバックを実行します。このプロセス中、共有表領域のサイズは変更されません。さらに、UNDO ログは削除操作を挿入操作に変換し、更新操作を逆更新操作に変換します。 削除方法: もう一つの注意点は、トランザクション共有テーブルスペースに UNDO ログを書き込むプロセスでは、REDO ログも書き込む必要があることです。トランザクションがコミットされると、トランザクションの永続性が有効になり、UNDO ログは不要になります。ただし、InnoDB は UNDO ログを直接削除するのではなく、UNDO ログのリンク リストに配置します。いつ削除するかは、MySQL パージ スレッドによって異なります。これは、他のトランザクションが UNDO ログを使用してこのレコードの以前のバージョンを取得する必要がないようにするために行われます。 スペース割り当て: 実際の運用では、データベース インスタンスが多数のトランザクションを実行する場合があります。各トランザクションの undo を保存するために別のログ データ ページを割り当てると、ストレージ領域が無駄になります。簡単な計算をしてみましょう。アプリケーションの TPS が 1000 であると仮定すると、各トランザクションに undo ページが割り当てられます。データ ページのサイズは 16kb で、1 分間に 60*1000 のデータ ページが生成されます。すると、1 分間に必要なスペースは約 960M のディスク領域となり、明らかに無理があります。そのため、innodb では undo ページを再利用できます。具体的な方法は、トランザクションがコミットされたときに、undo ページをリンク リストに入れ、undo ページの使用済み領域が 75% 未満かどうかを判断します。そうであれば、undo ページを再利用でき、後続の undo ログを現在の undo ログの後ろに追加できます。もちろん、show engine innodb status を使用してリンク リスト内の undo ログの数を表示することもできますが、ここでは説明しません。 上記はMySQLのundoログの詳細な内容です。MySQLのundoログの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: アイデアをDockerに接続してワンクリックでデプロイする方法
>>: WeChatアプレット開発で遭遇したことのない落とし穴のまとめ
今日は、ネイティブ JS で実装された見栄えの良いカウンターを紹介します。効果は次のとおりです。 以...
この記事では、例を使用して、MySQL インデックス カーディナリティの概念と使用方法を説明します。...
この記事では、jsネイティブカルーセルプラグインの具体的なコードを参考までに共有します。具体的な内容...
目次序文デモンストレーション効果HTMLコードCSSコードJavascriptコードデモアドレス序文...
最も単純な hello world 出力イメージを作成することは最も簡単なスタートですが、実行中のコ...
上はシステム時間、下はハードウェア時間です。ここでは変更を加えているので、同じくらいの速さになってい...
Mysql を完全にアンインストールするにはどうすればいいですか?以下の手順に従って実行してくださ...
最近、仕事でモバイルページを作成しました。もともと特別なことではありませんでしたが、非常に奇妙に感じ...
この実験では、空のデータベース、オフライン、オンラインの 3 つのモードで、1 つのマスターと 2 ...
1. セットアップを始める次のコード関数を簡単に紹介します。 ref 関数を使用して変数の変更を監視...
この記事の例では、JavaScriptで4桁のランダムな検証コードを生成する具体的なコードを参考まで...
nginx がリソース圧縮を実現する原理は、ngx_http_gzip_module モジュールを介...
この記事では、例を使用して、MySQL 外部キーの 3 つの関係について説明します。ご参考までに、詳...
目次イベントとは簡単な例イベントをバインドする方法フレームワーク内のイベントイベントオブジェクトイベ...
目次1. サブルート構文2. 例1. 2つの新しいコンポーネントを作成し、その内容を変更する2. ル...