mysql ダーティ ページとは何ですか?

mysql ダーティ ページとは何ですか?

ダーティページ(メモリページ)

クリーン ページ: メモリとディスク上のデータが一致しています。ダーティ ページ: メモリとディスク上のデータが一致していません。

ダーティページが表示されるのはなぜですか?

通常、高速更新操作はすべてメモリとログへの書き込みです。
すぐにはディスク データ ページに同期されません。この時点では、メモリ データ ページの内容はディスク データ ページと一致しておらず、これをダーティ ページと呼びます。
これはMySQLのメモリ管理メカニズムに関係する。

メモリ管理メカニズムの簡単な説明

バッファにはこれら 3 つのカテゴリのリストが含まれています。これらは、LRUList、FreeList、および FlushList です。
データベースを起動したばかりのときは、LRU リストにデータ ページはありません。 FreeList は空きページを保存します。

  • ページを読み取る必要がある場合は、FreeList から空きページが取得され、データを読み取った後、LRUlist に配置されます。
  • FreeList に空きページがない場合、LRU アルゴリズムに従って LRU リストの最後のページが削除されます。
  • LRUlist 内のページが変更されると、そのページはダーティ ページになり、FlushList に追加されます。

注: 現時点では、このページは LRUlist と FlushList の両方に存在します。

要約: LRUList (読み込まれたページを管理) と FreeList (空きページを管理) はページの可用性を管理するために使用されます。FlushList (ダーティ ページを管理) はダーティ ページの更新を管理するために使用されます。

ダーティ ページ データをディスクに同期するプロセス中に、ディスク データ ページで SQL ステートメントが実行された場合。実行速度が遅くなります

バッファのみに頼ってデータの変更や読み取りを行うことは可能ですか?

データの変更と読み取りがメモリ バッファのみに依存している場合、データベースがクラッシュすると、メモリ内のすべてのデータが失われます。そのため、MySQL は前述の redo ログを使用して、異常な再起動後のデータ復旧を実装します。 redo ログの概要については、こちらの記事を参照してください: MySQL-redo ログと binlog

簡単に言えば、異常な再起動後にバッファ内のデータが正常に復元できることを保証するために、バッファを更新する前に REDO ログが書き込まれます。

ダーティページを更新する必要がある理由

  • 前述のように、データがバッファにのみ保存されている場合、データベースがクラッシュし、メモリデータが失われます。したがって、ディスクにフラッシュする必要があります。
  • REDO ログが無限に大きい場合や、ファイル数が多い場合は、システム内での変更操作が多数発生します。クラッシュが発生すると、回復に非常に長い時間がかかります。

したがって、当然のことながら、メモリ内のダーティ ページを何らかのルールに従ってディスクにリフレッシュする必要があります。リフレッシュ操作により、バッファ サイズの問題と REDO ログ サイズの問題を解決できます。

  • バッファはディスクに保存できるため、無限である必要はありません。
  • 一度ディスクに保存されると、REDO ログ内の対応する部分のデータを解放できるため、REDO ログは無限である必要はありません。

ダーティ ページをフラッシュするシナリオは 4 つあります。

  • REDO ログがいっぱいになると、MySQL はすべての更新操作を一時停止し、ログのこの部分に対応するダーティ ページをディスクに同期します。
  • システム メモリが不足している場合は、一部のデータ ページを削除する必要があります。ダーティ ページを削除する場合は、まずそれらをディスクに同期する必要があります。
  • MySQL はシステムがアイドル状態であると判断すると、機会があればメモリ データをディスクに同期するため、パフォーマンスの問題は発生しません。
  • MySQL が正常にシャットダウンされると、MySQL はメモリ内のすべてのダーティ ページをディスクに同期します。これにより、次回 MySQL を起動したときにディスクから直接データを読み取ることができるため、起動速度が非常に速くなります。パフォーマンス上の問題はありません。

影響

1 REDO ログがいっぱいの場合は、それを回避するようにしてください。そうしないと、システム全体の更新が停止します。このとき、書き込みパフォーマンスは 0 になり、ログの対応するダーティ ページの同期が完了した後にのみ更新を実行できます。これにより、SQL ステートメントの実行が非常に遅くなります。

MySQL ダーティ ページについての説明はこれで終わりです。MySQL ダーティ ページに関するより詳しい情報は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL フラッシュリストとダーティページフラッシュメカニズム
  • MySQL ダーティ ページ フラッシュとテーブル スペースの縮小の原理の分析

<<:  onfocus="this.blur()" は視覚障害のあるウェブマスターに嫌われている

>>:  CentOS 上の Docker に Jupyter をインストールしてポートを開く方法

推薦する

プライベートウェアハウス(レジストリとハーバー)を構築するためのDockerの実装

使用される Docker イメージが増えるにつれて、イメージを保存する場所、つまりウェアハウスが必要...

大きなオフセットによる MySQL 制限ページングが遅い理由と最適化ソリューション

MySQL では通常、limit を使用してページ上のページング機能を完了しますが、データ量が大きな...

MySQLデータベースでゼロ値を含む日付の問題について簡単に説明します

デフォルトでは、MySQL は日付に 0 値を挿入することを受け入れますが、実際には日付の 0 値に...

SpringBoot + Vue プロジェクトを Linux サーバーにデプロイするための詳細なチュートリアル

序文SpringBoot + Vueのフロントエンドとバックエンドを分離したプロジェクトをどのように...

MySQL で結果を選択して更新を実行する例のチュートリアル

1. 単一テーブルクエリ -> 更新 テーブル名の更新 フィールド1=新しい値1、フィールド2...

js Promise同時制御メソッド

目次質問背景アイデアと実装質問次のように、同時実行 Promise の数を制御するメソッドを記述する...

Windows 2016 Server セキュリティ設定

目次システムアップデート構成Windows Update サーバーの変更自動更新を有効にして許可する...

nginx+WordPressで個人ブログを構築するプロセス全体の詳細な説明

0x00 はじめにWordPress は、世界で最も人気のある CMS システムです。PHP と M...

JavaScript タイピングゲーム

この記事では、タイピングゲームを実装するためのJavaScriptの具体的なコードを参考までに紹介し...

vue router-view のネストされた表示実装

目次1. ルーティング構成2. Vueページのネスト3. ネストされた関係1. ルーティング構成 定...

JavaScript Three.js でテキストを作成する最初の経験

目次効果テキストの作成を開始するまずフォントローダーを作成するフォントライブラリを読み込むテキストジ...

Nginx のアクセス制御とパラメータ調整方法

Nginx グローバル変数Nginx には、$variable 名を通じて使用できるグローバル変数が...

Dockerコンテナシェルスクリプトの実行ステータスを監視する方法

シナリオ会社のプロジェクトはDockerでデプロイされています。原因不明ですが、コンテナが時々停止し...

LinuxでTomcatのポート番号を変更する方法

ここには複数の Tomcat があります。それらを同時に使用する場合は、ポート番号を別の番号に変更す...

Vueプラグインの書き方を説明する記事

目次プラグインとはプラグインの作成プラグインの使用要約するプラグインとはVue フレームワークでは、...