検索
ホームページデータベースmysql チュートリアルMySQL トランザクションにおけるやり直しと元に戻すの分析 (画像とテキスト)

この記事の内容は、MySQL トランザクションの redo と undo の分析 (写真とテキスト) です。必要な方は参考にしていただければ幸いです。

トランザクションには、アトミック性、一貫性、分離性、耐久性という 4 つの特性があることは誰もが知っています。これがトランザクションの目的です。トランザクションの分離はロック機構によって実現され、トランザクションのアトミック性、一貫性、耐久性はREDOログとUNDOログによって保証されます。したがって、この記事では、トランザクションにおけるやり直しと取り消しに関するいくつかの問題について説明します。

  • やり直しログと取り消しログとは何ですか?

  • redo トランザクションの耐久性を確保するにはどうすればよいですか?

  • UNDO ログは REDO ログの逆のプロセスですか?

redo ログ

Redo の種類

Redo ログ (REDO ログ) が使用されることを保証しますトランザクションの耐久性。これはトランザクション ACID の D です。実際には、次の 2 つのタイプに分類できます。

  • #物理 REDO ログ

  • 論理 REDO ログ

InnoDB ストレージ エンジンでは、

ほとんどの場合、Redo はデータ ページの物理的な変更を記録する物理ログです。論理 REDO ログは、ページの実際の変更を記録するのではなく、ページを変更する操作の種類を記録します。たとえば、新しいデータ ページを作成する場合、論理ログを記録する必要があります。論理 REDO ログに関しては、より低レベルのコンテンツが含まれます。ここで覚えておく必要があるのは、ほとんどの場合、ページ上の DML 変更操作は Redo を記録する必要があるということです。役割。 Redo の構成

Redo ログの主な機能はデータベースのクラッシュ回復です

Redo の構成

Redo ログは単純に次の 2 つの部分に分けることができます:

    最初のファイルはメモリ内の揮発性の REDO ログ バッファです。
  • 2 番目のファイルは永続的な REDO ログ ファイルです。
  • Redo を書き込むタイミングは?

上の図は、Redo の書き込みプロセスを簡単に示したものです。ここでさらに詳しく説明します。 REDO 書き込みのタイミング:

    データ ページの変更が完了した後、ダーティ ページがディスクからフラッシュされる前に、REDO ログが書き込まれます。データが最初に変更され、ログが後で書き込まれることに注意してください
  • ##REDO ログはデータ ページの前にディスクに書き戻されます
  • #aggregation インデックス、セカンダリ インデックス、および元に戻すページへの変更はすべて、REDO ログに記録する必要があります。
  • Redo の全体的なプロセス
以下では、次の図に示すように、マクロの観点から REDO ログ フロー プロセスを把握するために、更新トランザクションを例として取り上げます。 :

MySQL トランザクションにおけるやり直しと元に戻すの分析 (画像とテキスト)

ステップ 1: まず、元のデータをディスクからメモリに読み取り、データのメモリ コピーを変更します。
  • 2 番目のステップ: REDO ログを生成し、REDO ログ バッファに書き込み、データの変更された値を記録します。 3 番目のステップ: トランザクションがコミットされたら、REDO ログ・バッファーの内容を REDO ログ・ファイルにリフレッシュし、REDO ログ・ファイルへの追加書き込みを使用します。
  • ステップ 4: 定期的にメモリ内の変更されたデータをディスクにコピーします
  • REDO はトランザクションの耐久性をどのように確保しますか?
  • InnoDB は、トランザクションのストレージ エンジンです。

    Force Log at Commit メカニズム

    を通じてトランザクションの耐久性を実現します。つまり、トランザクションがコミットされると、REDO ログ バッファーが最初に書き込まれます。 REDO ログ ファイルへの永続化は、トランザクションのコミット操作が完了するまで完了しません。このアプローチは、
  • Write-Ahead Log (ログ前永続化)
とも呼ばれ、データ ページを永続化する前に、メモリ内の対応するログ ページが永続化されます。

各ログが確実に REDO ログ ファイルに書き込まれるようにするため、デフォルトでは、REDO バッファが REDO ログ ファイルに書き込まれるたびに、InnoDB ストレージ エンジンは

fsync を呼び出す必要があります。 Operation ,REDO ログは O_DIRECT オプションなしで開かれるため、REDO ログは最初にファイル システム キャッシュに書き込まれます。 REDO ログがディスクに確実に書き込まれるようにするには、fsync 操作を実行する必要があります。 fsync はシステム コール操作です。そのため、ディスクのパフォーマンスはトランザクションの実行、つまりデータベースのパフォーマンスにも影響します。 (O_DIRECT オプションは Linux システムのオプションです。このオプションを使用すると、ファイルは直接 IO 操作され、ファイル システム キャッシュを経由せずにディスクに直接書き込まれます)

上記の Force Log at Commit メカニズム は、InnoDB ストレージ エンジンによって提供されるパラメータ
innodb_flush_log_at_trx_commit によって制御されます。このパラメータは、ディスクへの REDO ログのフラッシュ設定を制御できます。パラメータ値も次のように、ユーザーが非永続性を設定できるようにすることができます。

設定パラメータが 1 の場合 (デフォルトは 1)、トランザクションが次のように設定されている必要があることを意味します。 fsync コミット時に 1 回呼び出される操作。耐久性を確保する最も安全な構成です。

  • パラメータを 2 に設定すると、トランザクションのコミット時に write 操作のみが実行され、REDO ログ バッファのみがシステムのページ キャッシュに書き込まれることが保証されます。 、fsync 操作は実行されないため、MySQL データベースがダウンしてもトランザクションは失われませんが、

  • パラメータが に設定されている場合、オペレーティング システムがダウンする可能性があります。 0 の場合、トランザクションの送信時に REDO が書き込まれないことを意味します。ログ操作はマスター スレッドでのみ完了し、REDO ログの fsync 操作はマスター スレッドで 1 秒ごとに実行されるため、インスタンスがクラッシュします。最大 1 秒以内にトランザクションが失われます。 (マスター スレッドは、データの一貫性を確保するために、バッファ プール内のデータをディスクに非同期的に更新する役割を担います)

  • fsync および write操作 これは実際にはシステム コール関数であり、多くの永続化シナリオで使用されます。たとえば、Redis の AOF 永続化でも 2 つの関数が使用されます。 fsync 操作はデータをハードディスクに送信し、ハードディスクへの書き込みが完了して戻るまでブロックされます。 ## 操作にはパフォーマンスのボトルネックがあり、write 操作はシステムのページ キャッシュにデータを書き込んだ直後に戻り、システムのスケジューリング メカニズムに依存してキャッシュされたデータをディスクにフラッシュします。ユーザーバッファ—>ページキャッシュ—>ディスクです。

    MySQL トランザクションにおけるやり直しと元に戻すの分析 (画像とテキスト)

    トランザクションの耐久性を確保するための、上記のコミット時にログを強制するメカニズムに加えて、REDO ログの実際の実装も依存します。ミニトランザクション用にオンにします。

    Redo は InnoDB にどのように実装されますか?ミニトランザクションとの関係?

    Redo の実装は、実際にはミニトランザクションと密接に関連しています。ミニトランザクションは、同時トランザクション操作下でデータ ページ内のデータを

    確保するために使用されるメカニズムです。データベースが異常であるが、それがトランザクションの一部ではない場合。

    ミニトランザクションがデータ ページ データの一貫性を確保するには、ミニトランザクションは次の 3 つのプロトコルに従う必要があります

    :

    FIX ルール
    • #Write-Ahead Log

    • Force-log-at-commit

    • ## FIX ルール

    データ ページを変更する場合は、ページの x-latch (排他ロック) を取得する必要があります。データ ページを取得する場合は、s-latch (読み取り) が必要です。ページのロックまたは共有ロック) または x-latch。ページを変更またはアクセスする操作が完了するまでページのロックを保持します。

    先行書き込みログ

    先行書き込みログについては、前の説明で説明しました。データ ページを永続化する前に、メモリ内の対応するログ ページをまず永続化する必要があります。各ページには、ログ シーケンス番号を表す LSN (ログ シーケンス番号) があります (LSN は 8 バイトを占め、単調増加します)。データ ページを永続デバイスに書き込む必要がある場合、必要なデータはページの LSN よりも少なくなります。ログは最初に永続化デバイスに書き込まれます。では、なぜ最初にログを書き込む必要があるのでしょうか。ログを書き込まずにデータをディスクに直接書き込むことは可能ですか?原理的には可能ですが、データ変更によりランダム IO が発生しますが、ログはシーケンシャル IO であるため、ディスクのパフォーマンスを最大限に発揮できます。活用されている。

    Force-log-at-commit

    これは、上記のトランザクションの耐久性を確保する方法の内容に相当します。トランザクション内で複数のページを変更できます。先行書き込みログは単一のデータ ページの一貫性を保証できますが、トランザクションのコミット時にすべてのページを生成する必要があるトランザクションの耐久性を保証することはできません。 mini - トランザクション ログをディスクにフラッシュする必要があります。ログのフラッシュが完了した後、バッファ プール内のページが永続ストレージ デバイスにフラッシュされる前にデータベースがクラッシュした場合、データベースの再起動時にデータの整合性が保たれる可能性があります。ログを通じて確認されます。

    REDO ログの書き込みプロセス

    上図は、各ミニの REDO ログの書き込みプロセスを示しています。 -transaction は、ミニトランザクションによって保証される更新ステートメントなどの各 DML 操作に対応します。データが変更された後、REDO1 が生成され、最初にミニトランザクションのプライベート バッファーに書き込まれ、更新されます。ステートメント 完了後、redo1 をプライベート バッファからパブリック ログ バッファにコピーします。外部トランザクション全体がコミットされると、REDO ログ バッファが REDO ログ ファイルにフラッシュされます。 MySQL トランザクションにおけるやり直しと元に戻すの分析 (画像とテキスト)

    undo ログ

    undo ログの定義

    undo ログは主に、データの論理的な変更を記録します。エラーが発生したときに前の操作をロールバックするには、以前の操作をすべて記録し、エラーが発生したときにロールバックする必要があります。

    undo ログの役割

    undo は 2 つの機能を持つ論理ログです:

    トランザクションの場合ロールバック

    • MVCC

    ここでは MVCC (Multi-version Concurrency Control) については多くを述べませんが、トランザクション ロールバックの Undo ログに焦点を当てます。

    undo ログは、ロールバック中にデータベースを論理的に元の状態に復元するだけです。たとえば、INSERT は DELETE に相当し、各 UPDATE は逆の UPDATE に相当します。変更前の行に戻ります。 UNDO ログは、トランザクションのアトミック性を確保するためにトランザクションのロールバック操作に使用されます。

    #UNDO ログの書き込みタイミング

      #DML 操作でクラスタード インデックスが変更される前に UNDO ログを記録します
    • セカンダリ インデックス レコードを変更しても、元に戻すログは記録されません。
    • 元に戻すページを変更する場合も、REDO ログを記録する必要があることに注意してください。

    アンドゥの保存場所

    InnoDB ストレージ エンジンでは、アンドゥはロールバック セグメント (ロールバック) に保存されます。 セグメント)、各ロールバック セグメントは 1024 個のアンドゥ ログ セグメントを記録し、アンドゥは各アンドゥ ログ セグメントで実行されます。 5.6 より前では、ページを申請するには、ロールバック セグメントが共有テーブル スペースにありました。5.6.3 以降は、次の方法を使用できます。 innodb_undo_tablespace は、UNDO ストレージの場所を設定します。

    アンドゥの種類

    InnoDB ストレージ エンジンでは、アンドゥ ログは次のように分割されます:

      アンドゥ ログの挿入
    • update undo log
    • insert undo log は、挿入操作中に生成された undo ログを指します。これは、挿入操作の記録が表示されるのは次のユーザーのみであるためです。トランザクション自体は他のトランザクションには見えません。したがって、UNDO ログはトランザクションの送信後に直接削除でき、パージ操作は必要ありません。

    更新取り消しログには、削除および更新操作によって生成された取り消しログが記録されるため、トランザクションがコミットされたときに削除できないように、MVCC メカニズムを提供する必要がある場合があります。送信するときは、それを元に戻すログ リストに入れて、パージ スレッドが最終的な削除を実行するまで待ちます。

    補足: パージ スレッドの 2 つの主な機能は、元に戻すページのクリーニングと、ページ内の Delete_Bit 識別子を持つデータ行のクリアです。 InnoDB では、トランザクションの Delete オペレーションは実際にはデータ行を削除しませんが、レコードを削除せずにレコードの Delete_Bit をマークする Delete Mark オペレーションです。これは一種の「偽の削除」であり、マークが付けられているだけであり、実際の削除作業はバックグラウンドのパージ スレッドによって完了する必要があります。

    UNDO ログは REDO ログの逆のプロセスですか?

    アンドゥログ やり直しですか? ログの逆の処理?実際、その答えは前の記事から導き出すことができます。Undo ログは論理ログであり、トランザクションをロールバックする場合、データベースを元の状態に論理的に復元するだけです。一方、REDO ログは論理的なログです。 ログは、データ ページの物理的な変更を記録する物理ログです。明らかに、UNDO ログは REDO ログの逆のプロセスではありません。

    redo と undo の概要

    次に、2 つのログ プロセスを理解しやすくするために、redo ログ undo ログのプロセスを簡略化して示します。実際、挿入/更新/削除操作では、やり直しと元に戻すでは異なる内容と量が記録されます。 InnoDB メモリでは、一般的なシーケンスは次のとおりです。

    Write undo redo

    • Write undo

    • データの変更ページ

    • やり直しの書き込み

    • 概要

    この記事では、やり直しの内容を分析します。およびアンドゥログは一部の情報書籍を参考にまとめており、明記されていない箇所があるかもしれません。何か間違っているところがあれば、ご指摘ください。

    以上がMySQL トランザクションにおけるやり直しと元に戻すの分析 (画像とテキスト)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明
    この記事はsegmentfaultで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
    MySQL:初心者が習得するための必須スキルMySQL:初心者が習得するための必須スキルApr 18, 2025 am 12:24 AM

    MySQLは、初心者がデータベーススキルを学ぶのに適しています。 1.MySQLサーバーとクライアントツールをインストールします。 2。selectなどの基本的なSQLクエリを理解します。 3。マスターデータ操作:テーブルを作成し、データを挿入、更新、削除します。 4.高度なスキルを学ぶ:サブクエリとウィンドウの関数。 5。デバッグと最適化:構文を確認し、インデックスを使用し、選択*を避け、制限を使用します。

    MySQL:構造化データとリレーショナルデータベースMySQL:構造化データとリレーショナルデータベースApr 18, 2025 am 12:22 AM

    MySQLは、テーブル構造とSQLクエリを介して構造化されたデータを効率的に管理し、外部キーを介してテーブル間関係を実装します。 1.テーブルを作成するときにデータ形式と入力を定義します。 2。外部キーを使用して、テーブル間の関係を確立します。 3。インデックス作成とクエリの最適化により、パフォーマンスを改善します。 4.データベースを定期的にバックアップおよび監視して、データのセキュリティとパフォーマンスの最適化を確保します。

    MySQL:説明されている主要な機能と機能MySQL:説明されている主要な機能と機能Apr 18, 2025 am 12:17 AM

    MySQLは、Web開発で広く使用されているオープンソースリレーショナルデータベース管理システムです。その重要な機能には、次のものが含まれます。1。さまざまなシナリオに適したInnodbやMyisamなどの複数のストレージエンジンをサポートします。 2。ロードバランスとデータバックアップを容易にするために、マスタースレーブレプリケーション機能を提供します。 3.クエリの最適化とインデックスの使用により、クエリ効率を改善します。

    SQLの目的:MySQLデータベースとの対話SQLの目的:MySQLデータベースとの対話Apr 18, 2025 am 12:12 AM

    SQLは、MySQLデータベースと対話して、データの追加、削除、変更、検査、データベース設計を実現するために使用されます。 1)SQLは、ステートメントの選択、挿入、更新、削除を介してデータ操作を実行します。 2)データベースの設計と管理に作成、変更、ドロップステートメントを使用します。 3)複雑なクエリとデータ分析は、ビジネス上の意思決定効率を改善するためにSQLを通じて実装されます。

    初心者向けのMySQL:データベース管理を開始します初心者向けのMySQL:データベース管理を開始しますApr 18, 2025 am 12:10 AM

    MySQLの基本操作には、データベース、テーブルの作成、およびSQLを使用してデータのCRUD操作を実行することが含まれます。 1.データベースの作成:createdatabasemy_first_db; 2。テーブルの作成:createTableBooks(idintauto_incrementprimarykey、titlevarchary(100)notnull、authorvarchar(100)notnull、published_yearint); 3.データの挿入:InsertIntoBooks(タイトル、著者、公開_year)VA

    MySQLの役割:WebアプリケーションのデータベースMySQLの役割:WebアプリケーションのデータベースApr 17, 2025 am 12:23 AM

    WebアプリケーションにおけるMySQLの主な役割は、データを保存および管理することです。 1.MYSQLは、ユーザー情報、製品カタログ、トランザクションレコード、その他のデータを効率的に処理します。 2。SQLクエリを介して、開発者はデータベースから情報を抽出して動的なコンテンツを生成できます。 3.MYSQLは、クライアントサーバーモデルに基づいて機能し、許容可能なクエリ速度を確保します。

    MySQL:最初のデータベースを構築しますMySQL:最初のデータベースを構築しますApr 17, 2025 am 12:22 AM

    MySQLデータベースを構築する手順には次のものがあります。1。データベースとテーブルの作成、2。データの挿入、および3。クエリを実行します。まず、createdAtabaseおよびcreateTableステートメントを使用してデータベースとテーブルを作成し、InsertINTOステートメントを使用してデータを挿入し、最後にSelectステートメントを使用してデータを照会します。

    MySQL:データストレージに対する初心者向けのアプローチMySQL:データストレージに対する初心者向けのアプローチApr 17, 2025 am 12:21 AM

    MySQLは、使いやすく強力であるため、初心者に適しています。 1.MYSQLはリレーショナルデータベースであり、CRUD操作にSQLを使用します。 2。インストールは簡単で、ルートユーザーのパスワードを構成する必要があります。 3.挿入、更新、削除、および選択してデータ操作を実行します。 4. Orderby、Where and Joinは複雑なクエリに使用できます。 5.デバッグでは、構文をチェックし、説明を使用してクエリを分析する必要があります。 6.最適化の提案には、インデックスの使用、適切なデータ型の選択、優れたプログラミング習慣が含まれます。

    See all articles

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード写真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    写真から衣服を削除するオンライン AI ツール。

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    AI Hentai Generator

    AI Hentai Generator

    AIヘンタイを無料で生成します。

    ホットツール

    MinGW - Minimalist GNU for Windows

    MinGW - Minimalist GNU for Windows

    このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

    メモ帳++7.3.1

    メモ帳++7.3.1

    使いやすく無料のコードエディター

    WebStorm Mac版

    WebStorm Mac版

    便利なJavaScript開発ツール

    Dreamweaver Mac版

    Dreamweaver Mac版

    ビジュアル Web 開発ツール

    SublimeText3 Mac版

    SublimeText3 Mac版

    神レベルのコード編集ソフト(SublimeText3)