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 をインストールしてポートを開く方法

推薦する

Ubuntu 20.04 LTS で Java 開発環境を構成する

Java開発キットjdkをダウンロードするJDK のダウンロード アドレスはhttp://www.o...

MySQL 外部キー設定方法の例

1. 外部キーの設定方法1. MySQL では、2 つのテーブルを関連付けるために、外部キー (FO...

JavaScript 文字列の一般的なメソッドの詳細な説明

目次1. キャラクター文法パラメータ索引戻り値2. 連結文法パラメータ文字列2 [, …文字列N]戻...

7つの便利なTypeScriptの新機能

目次1. オプションの連鎖2. NULL値の結合3. 再帰型エイリアス4. アサーション署名5. P...

Vue でのキープアライブコンポーネントの使用例

問題の説明(キープアライブとは何か)キープアライブ 名前の通り、アクティブな状態を維持します。誰が活...

CentOS7 に Redis をインストールして設定する方法

導入Redis を詳しく説明する必要はありません。インストールと設定を始めましょう。インストールソー...

Vue.js アプリケーションのパフォーマンス最適化分析 + ソリューション

目次1. はじめに2. Vue JS のパフォーマンス最適化が必要な理由は何ですか? 3. Vueの...

JavaScript は単一のリンクリストプロセス分析を実装します

序文:複数の要素を格納するために、配列は最も一般的に使用されるデータ構造ですが、配列には多くの欠点も...

サーバー上でjupyterノートブックを実行する問題を解決する

目次サーバーはjupyterノートブックを実行します仮想環境次にファイアウォールをオフにしますJup...

vscode で console.log を書く 2 つの簡単な方法の詳細な説明

(I) 方法 1: 事前にスクリプト タグ内に直接定義します。この HTML ファイルにのみ適用され...

Linuxフラッシュのインストール方法

Linuxにフラッシュをインストールする方法1. Flashの公式サイトにアクセスし、ダウンロードを...

MySQLのメモリ使用量を表示する方法の詳細な説明

序文この記事では主にMySQLのメモリ使用量に関する関連コンテンツを紹介し、皆さんの参考と学習のため...

KVM ベースの SRIOV パススルー構成とパフォーマンス テストの詳細な説明

SRIOVの導入、VFパススルー構成、パケット転送速度性能テスト目次1. SRIOVの紹介2. 環境...

CocosCreator Typescriptでテトリスゲームを作る

目次1. はじめに2. 解決すべきいくつかの重要な問題3.最後に書く1. はじめに最近、Cocos ...

MySQL 8.0.20 のインストールと設定方法のグラフィックチュートリアル

MySQLのダウンロードとインストール(バージョン8.0.20)のチュートリアルは参考までに、具体的...