MTR は Mini-Transaction の略です。名前が示すように、これは「最小のトランザクション」と理解できます。MySQL では、基礎となるページへのアトミック アクセスのプロセスは Mini-Transaction と呼ばれます。ここでのアトミック操作とは、すべてが成功するかすべてが失敗するかのいずれかであり、中間状態がないことを意味します。 MTR は主に、UNDO ログと REDO ログを書き込むシナリオで使用されます。たとえば、B+ ツリー インデックスにレコードを挿入する場合、挿入は成功するか失敗するかのいずれかになります。このプロセスは MTR プロセスと呼ばれます。このプロセス中に、一連の redo ログが生成されます。このログ セットは、MySQL クラッシュ リカバリを実行するときに分割できない全体です。 3 つのステートメントを含むトランザクションがある場合、MTR の概念図は次のようになります。 ミニトランザクションは、一般的に次の 3 つの原則に従います。
ここでは、次の 3 つの原則について説明します。 1. 修正ルール 最初のルールを説明する前に、MySQL のラッチの概念を理解する必要があります。MySQL では、ラッチは軽量ロックです。ロックとは異なり、非常に短い時間ロックします。InnoDB では、ラッチはミューテックス (mutex) と rwlock (読み取り/書き込みロック) に分けられます。その目的は、重要なリソースを操作する同時スレッドの正確性を確保することです。 ラッチの概念を理解したので、次は固定ルールを見てみましょう。 データ ページを変更するには、このデータ ページの x ラッチを取得する必要があります。 ページにアクセスするには、S ラッチまたは X ラッチを取得する必要があります。 ページを保持しているラッチは、ページの変更またはアクセスの操作が完了するまで解放されません。 2. ウォルマート WAL テクノロジについては、皆さんもよくご存知だと思います。これは、Innodb ストレージ エンジンがクラッシュ リカバリをサポートする根本的な理由です。つまり、データ ページを永続化する前に、まずメモリ内の対応するログ ページを永続化する必要があります。 3. コミット時に強制ログ この原則は非常に重要です。つまり、トランザクションがコミットされると、クラッシュ回復ロジックを確実に実行するために、トランザクションによって生成されたすべての MTR ログが永続デバイスにフラッシュされる必要があります。 MTR を導入する理由は、MySQL 8.0 で導入される REDO ログ最適化に備えるためです。MySQL 5.7 では、MTR によってトランザクション内の操作のアトミック性が保証されます。ユーザーが操作を実行すると、データ ページが更新され、同時に redo ログが書き込まれます。mtr は redo ログのキャリアであり、各接続セッションのプライベート変数に存在します。 mtr が送信されると、ローカル redo ログがグローバル log_buffer にコピーされます。 redo ログの秩序性を保証するために、log_buffer へのアクセスにはロックが必要です。このロックは、前述の mutex です。このロックの保護下では、ローカル ログをグローバル バッファにコピーするだけでなく、バックグラウンド スレッドがフラッシュしてデータベース チェックポイントが前進し続けるのを支援するために、データ ページを flush_list に追加する必要があります。したがって、このロックは、MySQL の古いバージョンでは非常に競争力があります。 MySQL 8.0 ではこの問題が最適化されており、次の記事で詳しく分析します。 上記はMySQLにおけるMTRの概念の詳細な内容です。MySQL MTRの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
>>: Dockerを使用してMySQL 8.0をデプロイする方法の例
1. 解決策1.1 インターフェースコンテキストパスの説明2 つのバックエンド インターフェイス サ...
この要件を受け取ったとき、Baidu は、CSS リンクの置き換え、className の変更、le...
js 実行字句解析フェーズ: 形式パラメータ解析、変数宣言解析、関数宣言解析の 3 つの部分が含まれ...
1. なぜパッケージングを行うのですか?全体的なコード呼び出し、リクエストの公開処理、パーソナライズ...
Node.js はクライアントリクエストデータ内の中国語文字化けの問題を解決しますコード例: var...
目次概要例1) オブジェクトをフリーズする2) 配列をフリーズする3) 浅い凍結4) ディープフリー...
序文基本的なデータ構造として、配列とオブジェクトはさまざまなプログラミング言語で重要な役割を果たしま...
ELKとは何ですか? ELK は、Elastic が提供するログ収集およびフロントエンド表示ソリュー...
js では、ログインまたは登録を確認する前に、ユーザーが特定の契約書を読むように設定します (使用...
目次使用シナリオ達成方法1. 動的コンポーネントを配置する場所2. コンポーネントのインスタンスを取...
目次モードパラメータハッシュ履歴ハッシュ履歴.push()ハッシュ履歴.replace()アドレスバ...
この記事では、例を使用して、MySQL 5.7 で生成された列の使用方法を説明します。ご参考までに、...
最近、お客様から支援の依頼を受けました。管理されている通信コンピュータ ルームから、サーバーの 1 ...
トランザクション ログには、関連するデータベースに対する操作が記録され、データベースの回復に関連する...
目次テーブルの目的例えばテーブル分割戦略すでにオンラインになっている実行中のテーブルはどうすればよい...