MySQL データの永続化プロセスを理解すると、基盤となる MySQL についての理解を深めることができます。この記事では、このプロセスを一般的な方法で整理します。興味があれば、このプロセスを詳しく調べて調査することができます。
MySQL データのストレージは、通常、メモリ内のストアド プロシージャとハード ディスク上の永続ストレージの 2 つの部分に分割できます。ここでは、バッファ ポーリング
と ## が関係します。メモリ内の #redo.log とディスク上の
トランザクション ログ および
テーブル構造 この記事では、各部分の具体的な設計については詳しく説明しません。
バッファ ポーリング は InnoDB エンジン キャッシュ プールの一部であり、ここでは単にメモリ ブロックのキャッシュとして理解できます。データベースはディスクからメモリに読み取ります。
redo ログ はメモリ内の論理ログであり、トランザクション変更操作を記録します
はディスクです。
変更命令が実行されると、最初に行うことは、バッファーポーリング
でキャッシュを変更することです。変更されたデータは、
としてマークされます。同時に、変更された操作も redo ログ
に記録されます。よく言われる MVCC のバージョン チェーンは、redo ログ
の助けを借りて実装されます。 ダーティ ページはすぐにディスクにドロップされないことに注意してください。ただし、トランザクションは決済直後にディスクにドロップされ、定期的にトランザクションがディスクにドロップされるなど、設定可能なフラッシュ制御メカニズムがあります。ディスクによっては一定の時間等が発生します。
メモリ内の操作は非永続的です。予期しない問題が発生してシステムがクラッシュしても、データは永続化されていないため、理論的にはデータベースに損傷を与えることはありません。
3. ディスクの永続性
3.1 トランザクション ログの役割
と
シーケンシャル IO の 違いを簡単に理解する必要があります。
アドレス指定プロセスは、ディスク データを読み取るために読み取りが必要な場所にプローブを移動する必要があるため、ディスク IO の重要なボトルネックになります。 シーケンシャル IO は、アドレス指定された空間が連続していて移動距離が非常に短いことを意味し、
は、見つける必要があるアドレスがあらゆる場所に分散していることを意味します。長い距離。
したがって、明確に結論を導き出すことができます。ランダム IO
を シーケンシャル IO
に置き換えることで、ディスク IO の効率を効果的に向上させることができ、論理ログの役割は正しいです。この場合、ログ ファイルはディスク上で連続しているため、データ テーブルの情報があらゆる場所に分散されている場合に比べて、IO 効率が大幅に高くなる可能性があります。
トランザクション ログ内の操作を完全に更新している限り、トランザクションは正常に永続化され、専用のスレッドがログ情報をテーブル構造に保存します。 3.2 テーブル構造の 2 段階の格納
ログ情報をテーブル構造に格納するプロセスは 2 段階に分かれており、まず、データが のキャッシュ領域に更新されます。テーブルヘッダー。完了後、対応するテーブル構造で更新されます。
2 ステップ ストレージの目的は、データ ストレージの強力な一貫性を確保し、ディスクへのフラッシュ プロセス中のデータベースのダウンタイムによってデータが不完全になるのを防ぐことです。
以上がMySQL データ永続化プロセスの分析例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。