ホームページ  >  記事  >  データベース  >  MySQL データ永続化プロセスの分析例

MySQL データ永続化プロセスの分析例

PHPz
PHPz転載
2023-05-26 17:52:17863ブラウズ

1. プロセスの簡単な説明

MySQL データの永続化プロセスを理解すると、基盤となる MySQL についての理解を深めることができます。この記事では、このプロセスを一般的な方法で整理します。興味があれば、このプロセスを詳しく調べて調査することができます。

MySQL データのストレージは、通常、メモリ内のストアド プロシージャとハード ディスク上の永続ストレージの 2 つの部分に分割できます。ここでは、バッファ ポーリング と ## が関係します。メモリ内の #redo.log とディスク上の トランザクション ログ および テーブル構造 この記事では、各部分の具体的な設計については詳しく説明しません。

  • バッファ ポーリング は InnoDB エンジン キャッシュ プールの一部であり、ここでは単にメモリ ブロックのキャッシュとして理解できます。データベースはディスクからメモリに読み取ります。

  • redo ログ はメモリ内の論理ログであり、トランザクション変更操作を記録します

  • #トランザクション ログ

    はディスクです。

  • #テーブル構造
  • は実際にデータを保存する構造です

#2. メモリ内の操作

MySQL データ永続化プロセスの分析例

バッファポーリング

は、メモリに読み込まれたデータをキャッシュします。 , まずキャッシュにヒットがあるかどうかがチェックされます. ミスがあった場合, 必要なデータがディスクから読み取られます. キャッシュ管理には改良された LRU アルゴリズムが使用されていますが、ここでは詳しく紹介しません。

変更命令が実行されると、最初に行うことは、バッファーポーリングでキャッシュを変更することです。変更されたデータは、

ダーティページ

としてマークされます。同時に、変更された操作も redo ログ に記録されます。よく言われる MVCC のバージョン チェーンは、redo ログ の助けを借りて実装されます。 ダーティ ページはすぐにディスクにドロップされないことに注意してください。ただし、トランザクションは決済直後にディスクにドロップされ、定期的にトランザクションがディスクにドロップされるなど、設定可能なフラッシュ制御メカニズムがあります。ディスクによっては一定の時間等が発生します。 メモリ内の操作は非永続的です。予期しない問題が発生してシステムがクラッシュしても、データは永続化されていないため、理論的にはデータベースに損傷を与えることはありません。

3. ディスクの永続性

3.1 トランザクション ログの役割

InnoDB のディスク上の永続性は 2 つのステップに分かれています。最初のステップは論理ログの保存で、次に次に、ログ内のデータをディスク領域にフラッシュします。

論理ログを使用する理由を説明する前に、

ランダム IO

シーケンシャル IO

違いを簡単に理解する必要があります。 アドレス指定プロセスは、ディスク データを読み取るために読み取りが必要な場所にプローブを移動する必要があるため、ディスク IO の重要なボトルネックになります。 シーケンシャル IO は、アドレス指定された空間が連続していて移動距離が非常に短いことを意味し、

ランダム IO

は、見つける必要があるアドレスがあらゆる場所に分散していることを意味します。長い距離。

したがって、明確に結論を導き出すことができます。ランダム IOシーケンシャル IO に置き換えることで、ディスク IO の効率を効果的に向上させることができ、論理ログの役割は正しいです。この場合、ログ ファイルはディスク上で連続しているため、データ テーブルの情報があらゆる場所に分散されている場合に比べて、IO 効率が大幅に高くなる可能性があります。

トランザクション ログ内の操作を完全に更新している限り、トランザクションは正常に永続化され、専用のスレッドがログ情報をテーブル構造に保存します。 3.2 テーブル構造の 2 段階の格納ログ情報をテーブル構造に格納するプロセスは 2 段階に分かれており、まず、データが のキャッシュ領域に更新されます。テーブルヘッダー。完了後、対応するテーブル構造で更新されます。

2 ステップ ストレージの目的は、データ ストレージの強力な一貫性を確保し、ディスクへのフラッシュ プロセス中のデータベースのダウンタイムによってデータが不完全になるのを防ぐことです。

テーブルヘッダーのキャッシュ領域とテーブル構造のストレージブロックには、データの整合性を検証するためのチェックコードがあり、前者が完全で後者が不完全な場合は、直接再フラッシュしてください。前者のデータが後者の中にある場合は、解決できます。前者が不完全な場合は、ログからのフラッシュ処理が失敗したことを意味します。再度フラッシュするだけです。

以上がMySQL データ永続化プロセスの分析例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。