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

推薦する

CSS はスクロールバーを非表示にしてコンテンツをスクロールする効果を実現します (3 つの方法)

フロントエンド開発では、スクロールバーを非表示にしながらスクロールをサポートしなければならないという...

HTMLを教える記事

アーティストになるつもりがない場合は、開発者として HTML を読んで、必要に応じて簡単な変更を加え...

CSS 動的読み込みバー効果のサンプルコード

CSS変数の知識を使って、追加したコードとコメントを直接投稿します <!DOCTYPE htm...

docker コンペ応募でよく使われるコマンドのまとめ

アカウントにログイン DOCKER_REGISTRY=registry.cn-hangzhou.al...

JavaScriptはスタック構造の詳細なプロセスを実装する

目次1. スタック構造を理解する2. スタック構造のカプセル化3. 10進数を2進数に変換する1. ...

MySQL 中断された接続警告ログの分析

序文:場合によっては、MySQL に接続されたセッションが異常終了することが多く、エラー ログに「通...

Mysql 主キー UUID と自動増分主キーの違いと利点と欠点

導入私はしばらくの間、postgresql データベースを使用していました。クラウドに移行した後、自...

Centos サーバーで nginx を設定する方法の例

セキュアターミナルMobaXterm_Personalをダウンロードまず、安全なターミナルをダウンロ...

Linux deb パッケージの解凍、変更、その他の操作方法のコード例

さまざまな理由により、debパッケージ内のさまざまなファイルの内容を直接変更する必要がある場合があり...

Tomcat8はcronologを使用してCatalina.Outログを分割します

背景tomcat によって生成された catalina.out ログ ファイルが分割されていない場合...

jQueryはhide()とtoggle()関数を使用してカメラブランド表示の非表示機能を実現します。

最近、jQuery を学習しているときに、show()、hide()、toggle() 関数に出会い...

WeChatアプレットは固定ヘッダーとリストテーブルコンポーネントを実装します

目次必要:機能ポイントレンダリング実装のアイデア具体的なコード(react\taro3.0)特定のコ...

初心者がHTMLタグを学ぶ(3)

関連記事:初心者が学ぶ HTML タグ (2)導入された HTML タグは、必ずしも XHTML 仕...

CSS が最初のサイクルで画像を読み込むために @keyframes を使用するときに発生するホワイトギャップの問題 (フラッシュ画面) をすばやく解決します。

問題の説明: CSS アニメーション プロパティを使用すると、ループが最初に読み込まれたときに白いギ...

自動開始および停止コマンドを適用するには、Docker サービスを再起動します (推奨)

Docker サービス アプリケーションを再起動するコマンドを見てみましょう。具体的な内容は次のと...