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をデプロイする方法の例

推薦する

Vue の基本リスナーの詳細な説明

目次Vueのリスナーとは何かリスナーの使い方vue リスナーウォッチVue リスナー - ディープリ...

シェルスクリプトを使用して CentOS7 に python3.8 環境をインストールする (推奨)

ワンクリック実行仮想マシンに Python 3.8 をインストールするには、ネットワーク アダプター...

ウェブ画像形式としてPNG、JPG、GIFを選択して使用する方法

では、GIF、PNG、JPG のどの形式を候補形式として選択すればよいのでしょうか。また、どの画像形...

JavaScript 関数型プログラミングの基礎

目次1. はじめに2. 関数型プログラミングとは何ですか? 3. 純粋関数(関数型プログラミングの基...

仮想マシンに Windows Server 2008 オペレーティング システムをインストールする

この記事では、Windows Server オペレーティング システムのインストールと企業でのそのア...

vue 動的コンポーネント

目次1. コンポーネント2. キープアライブ2.1 問題点2.2 キープアライブを使って解決する2....

js でオブジェクトとオブジェクト メソッドを作成するいくつかの方法の詳細な説明

この記事は、JS レッドブックの第 8 章に記載されているオブジェクトに関する 2 番目の記事です。...

Mariadb リモート ログイン構成と問題解決

序文:インストール プロセスについては詳しく説明しません。問題に直接触れましょう。MySQL のリモ...

MySQL でデータを削除してもテーブル ファイルのサイズが変更されないのはなぜですか?

長期間稼働しているデータベースの場合、テーブルがストレージ領域を占有しすぎるという問題がよく発生しま...

ビジュアルデザイナーの成長の3つの段階のまとめ

この本「グラフィックデザイナーとして成長する」は多くの人が読んでおり、私もオリジナルの PDF 版を...

MySQL 5.7 zip アーカイブ バージョンのインストール チュートリアル

この記事では、MySQL 5.7 zipアーカイブ版のインストールチュートリアルを参考までに紹介しま...

オンライン MYSQL 同期エラーのトラブルシューティング方法の概要 (必読)

序文フェイルオーバーが発生した後、よくある問題は同期エラーです。データベースが小さい場合は、ダンプし...

MySQLからMariaDBへのスムーズな移行のための詳細な手順

1. MariaDB と MySQL の紹介1. MariaDB の紹介MariaDB は、MySQ...

Vue プロジェクトで addRoutes を使用する際の問題の解決策

目次序文1. 404 ページ1. 原因2. 解決策2.白い画面を更新する1. 原因2. 解決策3. ...

CSS で子 div の高さを親コンテナの残りのスペースに合わせる方法

1. フローティング方式を使用する効果画像: コードは次のとおりです: (.content の高さは...