MySQLにおけるMTRの概念

MySQLにおけるMTRの概念

MTR は Mini-Transaction の略です。名前が示すように、これは「最小のトランザクション」と理解できます。MySQL では、基礎となるページへのアトミック アクセスのプロセスは Mini-Transaction と呼ばれます。ここでのアトミック操作とは、すべてが成功するかすべてが失敗するかのいずれかであり、中間状態がないことを意味します。

MTR は主に、UNDO ログと REDO ログを書き込むシナリオで使用されます。たとえば、B+ ツリー インデックスにレコードを挿入する場合、挿入は成功するか失敗するかのいずれかになります。このプロセスは MTR プロセスと呼ばれます。このプロセス中に、一連の redo ログが生成されます。このログ セットは、MySQL クラッシュ リカバリを実行するときに分割できない全体です。

3 つのステートメントを含むトランザクションがある場合、MTR の概念図は次のようになります。

ミニトランザクションは、一般的に次の 3 つの原則に従います。

  • 1. 修正ルール
  • 2. ウォルマート
  • 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の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQL インストール図 MySQL グラフィック インストール チュートリアル (詳細な手順)
  • MySQL ユーザーの作成と認証方法
  • MySQL のヒント: PID ファイルを更新せずにサーバーが終了する問題の解決方法
  • MySQL の日付データ型と時刻型の使用法の概要
  • MySQL - ルートパスワードを変更する 4 つの方法 (Windows を例に)
  • MySQL における TIMESTAMP の使用法の詳細な説明
  • MySQL での一時テーブルの使用例
  • Python による MySQL データの総当たり攻撃の例
  • MySQL SELECT文の実行方法
  • 2 つの MySQL ユーザー削除ステートメント (delete user と drop user) の違い
  • MySQL 並列レプリケーションの簡単な分析

<<:  Vue+el-tableはセルの結合を実現します

>>:  Dockerを使用してMySQL 8.0をデプロイする方法の例

推薦する

Linux trコマンドの使用

1. はじめにtr はテキストの一部を変換または削除するために使用されます。 tr は transl...

JavaScript でプロトタイプ パターンを実装する方法

概要プロトタイプ パターンは、プロトタイプ インスタンスによって作成されるオブジェクトの型を指し、こ...

Linux で rc.local ファイルがない場合の完璧なソリューション

新しい Linux ディストリビューションには rc.local ファイルがなくなりました。サービス...

Node8 における AsyncHooks 非同期ライフサイクル

Async Hooks は Node8 の新機能です。NodeJs の非同期リソースのライフサイクル...

CSS で波の効果を作成するためのアイデア

以前、純粋な CSS を使用して波の効果を実現する方法をいくつか紹介しました。それらについては、次の...

Vueはキャンバスの手書き入力を使用して中国語を認識します

効果画像: 序文:最近、屋外の大画面プロジェクトに取り組んでいました。システムの入力方法は使いにくか...

CSS 配置レイアウト (位置、配置レイアウト スキル)

1. ポジショニングとは何ですか? CSS の position 属性には、absolute/re...

VMware esxi6.5 のインストールと使用の詳細な手順

目次導入建築ESXIの利点vSphere とは何ですか? 2. 仮想マシンの利点3. 仮想マシンを使...

Nginx+ModSecurity セキュリティモジュールの導入

目次1. ダウンロード2. 展開1.Nginxのデプロイメント2. ModSecurityの展開3....

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

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

Vueは動的コンポーネントを使用してTAB切り替え効果を実現します

目次問題の説明Vueの動的コンポーネントとはアプリケーションシナリオの説明実装手順ステップ 1 (新...

VmWareでcentos7をインストールするときにインターネットにアクセスできない問題の解決策

Centos7 のインストール時に VmWare がインターネットにアクセスできない場合はどうすれば...

新しい CSS :where および :is 疑似クラス関数とは何ですか?

:is と :where とは何ですか? :is()と:where()は、セレクターを作成するとき...

MySQL ディープページング問題の解決の実践記録

目次序文ディープページングを制限すると遅くなるのはなぜですか?サブクエリによる最適化B+ツリー構造の...

Mysql ALTER TABLE はフィールドを追加するときにテーブルをロックしますか?

目次MySQL 5.6以前MySQL 5.6以降要約する知らせMySQL 5.6以前更新手順元のテー...