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

推薦する

フロントエンド制作に関する簡単な議論: 互換性のために IE6 はまだ必要ですか?

国内市場ではIE6~7のサポートに対する一定の需要がまだありますが、フロントエンド開発者として、私た...

...

MySQLの共通関数の概要

序文: MySQL データベースは、よく使用される集計関数、日付および文字列処理関数など、幅広い関数...

MySQL 同時実行制御の原則に関する知識ポイント

Mysql は、高性能なデータ ストレージ サービスを提供する主流のオープン ソース リレーショナル...

Nginx サーバーが Systemd カスタム サービス プロセス分析を追加

1. nginxを例に挙げるyumコマンドを使用してNginxをインストールしましたSystemd ...

CSSでnグリッドレイアウトを実装する方法

一般的なアプリケーションシナリオ現在のアプリのインターフェースは基本的に同じであり、グリッドレイアウ...

MySQL遅延スレーブを導入するメリットのまとめ

序文MySQL のマスター/スレーブ レプリケーション関係は、厳密には「同期」または「マスター/スレ...

Linux システムでのルート ディレクトリ拡張の概要

1. Linuxディスクの状態を確認する df -lh lsblkコマンドは、使用可能なすべてのブロ...

CSS スタッキングと Z インデックスのサンプルコード

カスケードとカスケードレベルHTML 要素は 3 次元の概念です。水平方向と垂直方向に加えて、「Z ...

Ubuntu 16.04/18.04 に Pycharm と Ipython をインストールするチュートリアル

Ubuntu 18.04の場合1. sudo apt install python 。コマンドライン...

Linux での rpm、yum、ソースコードの 3 つのインストール方法の詳細な紹介

第1章 ソースコードのインストールRPM パッケージは特定のシステムとプラットフォームに応じて指定さ...

JavaScript のスプレッド演算子とレスト演算子の違いの詳細な説明

目次レスト演算子とは何ですか? JavaScript 関数では REST 演算子はどのように機能しま...

Vue 組み込みコンポーネントのキープアライブでの LRU アルゴリズムの使用

目次Vue の keep-alive 組み込みコンポーネントの使用でもこのアルゴリズムが使用されます...

Windows 10 + mysql 8.0.11 zipインストールチュートリアルの詳細

準備する: MySQL 8.0 Windows zip パッケージのダウンロード アドレス: htt...

Vue ユニットテストに推奨されるプラグインと使用例

目次フレーム最高レベルのエラー報告活発なコミュニティとチーム冗談モカ推奨プラグインVue テストライ...