MySQLのFreeListメカニズムの詳細な説明

MySQLのFreeListメカニズムの詳細な説明

1. はじめに

MySQL が起動すると、BufferPool が初期化されます。クエリ操作を実行する前は、BufferPool のキャッシュ ページは空のメモリ ブロックであり、使用されておらず、データも保存されていません。

また、それが指すキャッシュ ページは、キャッシュ ページの説明情報を通じて直接かつ一意に見つけることができることもわかっています。

ディスクから読み取ったデータ ページをどのバッファー ページに配置する必要があるか考えたことがありますか?

この問題により、フリー リストが表示されます。

2. フリーリスト

実際、フリー リストは、キャッシュ ページの説明情報に基づいてバッファー プールに編成された双方向リンク リストです。つまり、フリーリスト内の各ノードは、キャッシュページに対応する記述情報です。指定されたキャッシュページ(キャッシュページ)は説明情報を通じて見つけることができます

InnoDB が Free List を設計した本来の目的は、上記の問題を解決することです。

このキャッシュ ページにデータが格納されていない場合、対応する説明情報はフリー リストに保持されます。このとき、ディスクから読み取ったデータ ページをキャッシュ ページに配置する場合は、まずフリー リストからノードを見つけ (フリー リスト内のすべてのノードは、一度も使用されたことのないキャッシュ ページを指します)、その後、読み取ったデータ ページをそのノードが指すキャッシュ ページに配置する必要があります。

対応: データがデータ ページに配置された後。対応する説明情報ブロックはフリーリストから削除されます。

3. データ ページがキャッシュ内にあるかどうかを確認するにはどうすればよいでしょうか?

MySQL は、読み取ったデータ ページがキャッシュ ページ内にあるかどうかをどのようにして認識するのか疑問に思ったことはありませんか?

この関数の実装は、別のデータ構造、ハッシュテーブルに依存します。

キー = テーブルスペース番号 + データページ番号

値 = キャッシュページアドレス

ハッシュ テーブルに存在する場合、データ ページがバッファー プールにすでに存在するため、バッファー プール内のキャッシュ ページが最初に使用されます。バッファ プール内のキャッシュ ページが最初に使用される理由は、間違いなく推測できると思います。まず、ランダム ディスク IO が回避されます。次に、キャッシュ ページ内のデータは変更されたダーティ データである可能性があります。

以上がMySQLのFreeListメカニズムの詳細な説明です。MySQLのFreeListメカニズムの詳細については、123WORDPRESS.COMの他の関連記事をご覧ください。

以下もご興味があるかもしれません:
  • Windows での MySQL 5.6 のインストールと設定 (スクリーンショットと詳細な手順付き)
  • Mysql 文字列インターセプション関数 SUBSTRING の使用方法
  • MySQL ユーザーの作成と認証方法
  • mysql インデックスの追加 mysql インデックスの作成方法
  • MySQL の左結合、右結合、内部結合の使用法の超詳細な分析
  • MySQL での replace の使用
  • Mysqlのバージョン番号を確認するいくつかの方法
  • Mysql コマンドラインで SQL データをインポートする
  • MySQL のルート パスワードを忘れた場合にそれを表示または変更する方法 (画像とテキスト付き)
  • MySQLデータベースへのリモート接続を有効にする方法

<<:  行の高さと垂直方向の配置に関する包括的な理解

>>:  Dockerを使用してシンプルなJava開発およびコンパイル環境を構築する方法の詳細な説明

推薦する

Kylin 4.0.2 (Ubuntu) でブート パーティションを拡張するプロセスの紹介

目次序文1. 新しいパーティションを準備する2. ブートパーティションをコピーする3. fstabフ...

Windows DNS サーバーに「ワームレベル」の脆弱性が露呈、17 年間存在

脆弱性の紹介SigRed の脆弱性はワーム化可能であるため非常に危険です。つまり、ユーザーの介入なし...

MySQL 5.7.20\5.7.21 無料インストール版のインストールと設定のチュートリアル

参考までに、mysql 5.7.20 / 5.7.21 をダウンロード、インストール、構成します。具...

vue keepAlive キャッシュクリア問題事例の詳細な説明

Keepalive は Vue プロジェクトでのキャッシュによく使用され、基本的な要件を満たすのに非...

Nginx プロキシ使用時にヘッダーに「_」が含まれることで情報が失われる問題の解決方法

序文ゲートウェイプロジェクトを開発する場合、署名 sign_key 情報はリクエスト時にリクエスト ...

ウェブサイトのフッター沈下現象に対する3つの解決策を詳しく解説

背景多くのウェブサイトのデザインは、一般的にコンテンツ+フッターの2つの部分で構成されています。コン...

Linux で nginx を起動および再起動する方法

Nginx (エンジン x) は、IMAP/POP3/SMTP サービスも提供する高性能 HTTP ...

Tik Tok サブスクリプション ボタンのアニメーション効果を実現する CSS

少し前にTik Tokを見ていて、フォローするときのボタンアニメーションがとても美しいと思ったのと、...

Vue3 プロジェクトで WeChat 認証ログインをエレガントに実装する方法

目次序文準備する実装のアイデアコードについて要約する序文WeChat 認証ログインは、WeChat ...

Windows 64 ビット版 MySQL 5.7 以降の解凍パッケージにデータディレクトリと my-default.ini がなく、サービスが起動できない問題の簡単な解決方法 (問題概要)

私は SQL の初心者で、オープンソースのインストールは非常に簡単だと思っていましたが、その過程でい...

Ubuntu 18.04 のすべての Python ライブラリを一度にアップグレードする方法

ピップとは何かpip は、Python パッケージの検索、ダウンロード、インストール、アンインストー...

MySQLの重複排除方法

MySQLの重複排除方法【初級】繰り返しのセリフが少ないdistinctive を使用してそれらを見...

MySQL コピーテーブルと許可分析の 3 つの実装方法

テーブルを素早くコピーする方法まず、テーブル db1.t を作成し、1000 行のデータを挿入します...

MySQL の lru リンク リストの簡単な分析

1. 従来のLRUリンクリストについて簡単に説明するLRU:最も最近使われなかったものLRU リンク...

Vueは開始時間と終了時間の範囲クエリを実装します

この記事では、Vueで開始時間と終了時間の範囲を照会する方法を参考までに紹介します。具体的な内容は次...