1. レビュー MySQL の起動後にバッファ プールが初期化されます。バッファ プールは N 個の空のキャッシュ ページも初期化し、その記述データは LRU リンク リストと FreeList 二重リンク リストに編成されます。 このとき、ディスクからデータ ページを読み取る際には、まず Free List から空いているキャッシュ ページの説明情報を検索し、読み取ったデータ ページをキャッシュ ページにロードします。同時に、キャッシュ ページの説明情報はフリー リストから削除されます。また、説明情報ブロックは LRU リンク リストにも保持されます。 データ ページがバッファー プールにロードされた後、そのデータ ページに対して変更を実行できます。 2. フラッシュリスト クライアントへの応答を高速化するために、MySQL はバッファー プール内のデータを変更しますが、LRU リンク リスト内のキャッシュ ページを変更すると、ページ内のデータはディスク上のデータ ページ情報と一致しなくなります。一般的に、この種のデータ ページはダーティ ページと呼ばれます。 データの最終的な一貫性を確保するために、MySQL はダーティ ページをディスクにフラッシュバックする必要があります。 しかし、問題は、どのデータ ページをディスクにフラッシュバックする必要があるかということです。 これでフラッシュ リストに進みます。 フラッシュ リストはフリー リストと非常によく似ており、どちらもバッファー プール内のデータ記述情報によって編成された双方向リンク リストです。 メモリ内のバッファ ページを変更すると、バッファ ページに対応する説明情報ブロックがフラッシュ リストに追加されます。この方法では、バッファ プールに十分なデータ ページがない場合に、フラッシュ リスト内のダーティ データ ページをディスクに更新することを優先できます。 これまでの記事を読んだことがあれば、LRUList、FreeList、FlushList、バッファー プール、ダーティ ページ、ダーティ データについて知っているはずです。 勝利を目指しましょう!ダーティページドロップの仕組みを見てみましょう 3. ダーティページとは何ですか?ダーティデータとは何ですか? ダーティページとは何ですか? フラッシュ リストを紹介した記事で、ダーティ ページは LRU リンク リストで変更されたキャッシュ ページであると説明しました。これらはディスク上のデータ ページと矛盾しており、ダーティ ページをディスクにフラッシュバックする必要があります。 ダーティデータとは何ですか? この問題は、実際にはダーティ リードという概念につながります。たとえば、トランザクション A はトランザクション B からコミットされていないデータを読み取ります。このデータをダーティ データと呼びます。 4. ダーティページをディスクにフラッシュするタイミング バッファ プールが十分でない場合、MySQL は LRU メカニズムに従って、古いサブリスト部分のキャッシュ ページを LRU リンク リストから移動します。削除されたキャッシュ ページの説明情報がフラッシュ リストにある場合、MySQL はそれをディスクにフラッシュする必要があります。 InnoDB ストレージ エンジンがダーティ ページをディスクにフラッシュバックする機会は数多くあります。これを拡張知識として見ることができます。 1. MySQL データベースが閉じられると、すべてのダーティ データ ページがディスクにフラッシュバックされます。この機能は、パラメータ innodb_fast_shutdown=0 によって制御されます。デフォルトでは、InnoDB はシャットダウンする前にダーティ ページをディスクにフラッシュし、UNDO ログをクリーンアップします。 2. バッファ プール内のページの一定割合を 1 秒ごとまたは 10 秒ごとに非同期的にディスクに更新するバックグラウンド スレッド マスター スレッドがあります。 3. MySQL 5.7 では、バッファ プールはページ クリーナー スレッドによって更新されます。 innodb_page_cleaners パラメータを使用してページ クリーナー スレッドの数を制御できますが、この値をバッファー プールの数よりも大きく調整すると、MySQL は innodb_page_cleaners の数を innodb_buffer_pool_instances の数に自動的に設定します。 5. REDO ログが利用できない場合、ダーティ ページ リスト内のダーティ ページは強制的にディスクに更新されます。このメカニズムもバックグラウンド スレッドによって完了します。 5. ダーティページリフレッシュに関するその他の知識ポイント 隣接するデータ ページを更新します。つまり、MySQL がダーティ ページをディスクに更新すると、そのダーティ ページに隣接するダーティ ページも同様にディスクに更新されます。 このプロセスは、パラメータ innodb_flush_neighbors によって制御できます。
では、どの状態に設定するかをどのように選択するのでしょうか? MySQL インスタンスが配置されているマシンのストレージ タイプに基づいて決定できます。ストレージが HDD の場合、HDD のディスク リフレッシュ レートが低いため、オンにすることをお勧めします。このパラメータをオンにすると、IO 操作を効果的に削減できます。逆に、SSD ストレージを使用する場合は、ディスク IO が高くなるという特性があるため、このパラメータを無効にすることをお勧めします。 上記は、MySQL フラッシュ リストとダーティ ページ ディスク メカニズムの詳細です。MySQL フラッシュ リストとダーティ ページ ディスク メカニズムの詳細については、123WORDPRESS.COM の他の関連記事をご覧ください。 以下もご興味があるかもしれません:
|
<<: HTML iframe と frameset の違い_PowerNode Java Academy
>>: Dockerコンテナが起動直後に終了する問題を解決する
MySQL 5.7.18 無料インストール版のインストールチュートリアルMySQL は現在、世界で最...
公式サイトからインストールパッケージをダウンロードします: mysql-8.0.19-linux-g...
この記事では、WeChatアプレットの左右連動を実現するための具体的なコードを参考までに紹介します。...
目次サイクルのために入室のためのその間しながら行うループから抜け出す要約するサイクルのためにループは...
質問特定の MySQL 接続について、それがどのクライアント プロセスからのものであるかをどのように...
1. MySQL 独自のストレステストツール - Mysqlslap mysqlslap は、mys...
コードをコピーコードは次のとおりです。 <span style="font-size...
目次Zabbix カスタム監視 nginx ステータス1. ステータスインターフェースを開く2. 監...
コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...
目次1. オペレーティングシステムとは何か2. Linuxの起源3. Linuxの基本機能4. Li...
今日は Docker でのネットワーク設定を試し、後で忘れないようにプロセスを記録しました。 (シス...
軽量のオープンソース データベースである MySQL は、エンタープライズ レベルのアプリケーション...
目次主キー制約ユニーク制約主キー制約PRIMARY KRY 主キーは一意です。テーブルには主キーを ...
MYSQL は、MYSQL サービスやその他のコンポーネントをインストールするためのインストーラ方式...
1. ノードを削除するkubectl delete node node01を実行します。 2. この...