MySQL データベースのアーキテクチャのメモリ アーキテクチャ

        MySQL のバージョン 5.5 以降、InnoDBストレージ エンジンがデフォルトで使用され、トランザクション処理に優れ、クラッシュ回復機能があり、日常の開発で広く使用されています。

        メモリ構造は、主にバッファ プール変更バッファアダプティブ ハッシュ インデックス、ログ バッファの 4 つの主要なブロックに分かれていますこれら 4 つの部分について次に説明します。

1)。バッファプール

        InnoDB ストレージ エンジンはディスク ファイル ストレージに基づいています。物理ハードディスクへのアクセスとメモリ内でのアクセスには速度に大きな違いがあります。両者の I/O 効率の差をできるだけ補うために、アクセスごとのディスク I/O を避けるために、頻繁に使用されるデータをバッファ プールにロードする必要があります

        InnoDB のバッファ プールには、インデックス ページとデータ ページだけでなく、アンドゥページ、挿入キャッシュ、アダプティブ ハッシュ インデックス、InnoDB のロック情報もキャッシュされます。

        バッファプール Buffer Pool は、ディスク上で頻繁に操作される実データをキャッシュできるメインメモリ上の領域で、追加、削除、変更、クエリなどの操作を行う場合、まずバッファプール内のデータを操作(バッファプール内にデータがない場合はディスクからロードしてキャッシュ)し、その後一定の頻度でディスクにリフレッシュすることでディスク IO を削減し、処理を高速化します

        バッファプールの単位は Page であり、最下層はリンクリストデータ構造を使用してPageを管理します州に応じて、ページは3 つのタイプに分類されます。

        • フリーページ: フリーページ、使用されません。

        • クリーンページ: ページは使用されており、データは変更されていません。

        • ダーティ ページ: ダーティ ページ。 ページは使用されており 、データは変更されており、その中のデータはディスク上のデータと一致しません。
         専用サーバーでは、通常、物理メモリの 80 % がバッファ プールに割り当てられます。パラメータ設定: 変数を表示
'innodb_buffer_pool_size' のように;

2)。バッファの変更

         Change Buffer 、変更バッファ (非一意のセカンダリ インデックス ページ用)、 DML ステートメントの実行時に、これらのデータ ページが バッファ プール にない場合 、ディスクは直接操作されませんが、データ変更は変更バッファChange Bufferに保存されます。
将来データが読み取られるとき、データはマージされて バッファ プールに復元され 、マージされたデータはディスクに更新されます。
       
         変更バッファの意味は何ですか?
        クラスター化インデックスとは異なり、セカンダリ インデックスは通常は一意ではなく、比較的ランダムな順序でセカンダリ インデックスに挿入されます。同様に、削除と更新はインデックス ツリー内の隣接していないセカンダリ インデックス ページに影響を与える可能性があり、毎回ディスクを操作すると大量のディスク IO が発生します。ChangeBuffer を使用すると、バッファ プール内でマージ処理を実行して、ディスク IOを削減できます
        

3)。アダプティブ ハッシュ インデックス

         バッファ プールデータに対するクエリを最適化するための適応型 ハッシュ インデックス MySQLinnoDBエンジンはハッシュインデックスを直接サポートしていませんが、この適応型ハッシュインデックスの機能を提供します。前述したように、等価マッチングを実行する場合、一般にハッシュインデックスB + ツリーよりもパフォーマンスが高くなります。これは、ハッシュインデックスが必要とするIO は通常 1 つだけであるのに対し、B+ツリーでは複数の一致が必要ながあるため、ハッシュインデックスの効率は高いですが、ハッシュインデックスは範囲クエリやファジー マッチングには適していません。
         InnoDBストレージ エンジンは、テーブル上の各インデックス ページのクエリを監視し、 特定の条件下で ハッシュ インデックスによって速度が向上することが確認された場合、適応 ハッシュインデックスと呼ばれるハッシュインデックス が確立されます
         適応型ハッシュ インデックスは、手動介入なしで、状況に応じてシステムによって自動的に完成されます。
         パラメータ: adaptive_hash_index

4)。ログバッファ

         ログ バッファ: ログ バッファは 、ディスクに書き込まれる ログ ログ データ ( REDO ログ UNDO ログ )を保存するために使用されます。
デフォルトのサイズは 16MBで 、ログ バッファ内のログは定期的にディスクにフラッシュされます。多数の行を更新、挿入、または削除するトランザクションが必要な場合、ログ バッファーのサイズを増やすとディスク I/O を節約できます
         パラメータ: innodb_log_buffer_size : バッファサイズ
        innodb_flush_log_at_trx_commit : ログがディスクにフラッシュされるとき、値には主に次の 3 つが含まれます。
        1: トランザクションがコミットされるたびにログが書き込まれ、ディスクにフラッシュされます (デフォルト値)。
         0: ログは 1 秒に 1 回ディスクに書き込まれ、フラッシュされます。
        2: ログは各トランザクションのコミット後に書き込まれ、1 秒に 1 回ディスクにフラッシュされます。

おすすめ

転載: blog.csdn.net/weixin_59526725/article/details/126035851