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

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

1. 従来のLRUリンクリストについて簡単に説明する

LRU:最も最近使われなかったもの

LRU リンク リストは誰もが知っていると思います。これは基本的なデータ構造です。面接で LRU リンク リストとは何かと尋ねられたり、LRU リンク リストを手動で記述するように求められたりしたことがあると思います。

前の記事を読んでいる場合: クエリ キャッシュと BufferPool の違いがわかりませんか?話し合いましょう!

MySQL のバッファ プール メカニズムと、MySQL データ編成の最小単位がデータ ページであることはご存知でしょう。また、データ ページは、LRU リンク リスト データ構造を使用してバッファー プール内でまとめて整理されることもご存知でしょう。

実際、いわゆる LRU リンク リストは、以下に示すように、本質的には双方向の循環リンク リストです。

次に、LRU リンク リストとデータ ページ メカニズムを組み合わせて MySQL がデータをロードするメカニズムについて説明します。

ディスクから読み取られたデータ ページを若いページと呼び、若いページはリンク リストの先頭に直接配置されます。 LRU リンク リストにすでに存在するデータ ページが使用される場合、そのデータ ページも若いページと見なされ、リンク リストの先頭に移動されます。このように、リンク リストの末尾のデータは、最も最近使用されていないデータです。バッファー プールの容量が不足している場合、またはバックグラウンド スレッドがデータ ページをアクティブに更新している場合は、リンク リストの末尾のデータ ページが最初に更新されます。

2. 従来のLRUリンクリストの欠点

オペレーティング システム レベルでの空間局所性の原則については、これまでに聞いたことがあると思います。

空間的局所性: これは、データの一部を読み取るときに、その周囲のメモリ アドレスに格納されているデータも読み取られる可能性が高いため、オペレーティング システムがデータの一部を事前に読み取るのを支援することを意味します。

MySQL には事前読み取りメカニズムもあります。

  1. バッファ プールがゾーン内に 13 個の連続したデータ ページを格納する場合、このゾーンから読み取ると、MySQL はこのゾーン内のすべてのデータ ページをバッファ プール内の LRU リンク リストにロードします。 (そして、これらの事前読み取りデータページをまったく使用しなくなるかもしれません)
  2. ゾーン内の innndb_read_ahead_threshold=56 を超えるデータ ページに連続的にアクセスすると、MySQL は自動的に次の隣接ゾーンのデータ ページを LRU リンク リストに読み込みます。 (このメカニズムはデフォルトでは無効になっています)
  3. select * from xxx; を実行すると、テーブル内にデータ ページが多数ある場合、これらのデータ ページによって、バッファー プール内の頻繁に使用されるキャッシュ ページが 1 つずつ排除され、LRU リンク リストに残るのはあまり使用されないデータだけになる可能性があります。

上記から、いわゆる事前読み取りメカニズムの利点は、実際には、最も最近使用されていないデータ ページをディスクにフラッシュするという LRU の本来の設計意図に反していることがわかります。

3. MySQL LRU リンクリスト

次に、MySQL のバッファー プールが LRU リンク リストをどのようにカスタマイズするか、また LRU が InnoDB のどのような問題を解決するのに役立ったかを見てみましょう。

業務で大量の CRUD を実行する場合、バッファ プール内の LRU リンク リストにデータ ページを継続的に読み込む必要があります。

MySQL の LRU リンク リストの長さは次のとおりです。

LRU リンク リストは、MidPoint によって新しいサブリストと古いサブリストの 2 つの部分に分割されます。

そのうち、新サブリストは約 5/8 を占め、旧サブリストは 3/8 を占めています。

新しいサブリストには新しいページが保存され、古いサブリストには古いページが保存されます。

MidPoint のデフォルト値は次のように確認できます。

ユーザーはビジネスの動向に応じてこのパラメータを調整できます。

これは実はホットデータとコールドデータを分離するという設計思想です。従来の LRU リンク リストに比べて大きな利点があります。

4. MySQL カスタマイズされた LRU リンク リストの利点<br /> MySQL LRU リンク リストの場合、リンク リストは MidPoint によって 2 つの部分に分割されます。

ディスクから新しく読み取られたデータは、古いサブリストの先頭に配置されます。この方法では、実際に select * from t; を使用した場合でも、新しいサブリスト内の頻繁にアクセスされるデータ ページはディスクにフラッシュされません。

通常の状況では、古いサブリストのキャッシュ ページにアクセスすると、そのキャッシュ ページは新しいサブリストに昇格され、ホット データになります。

ただし、select * from t によって大量のデータを Old Sublist にロードし、1 秒以内に再度アクセスすると、この期間中にアクセスされたキャッシュされたページはホット データに昇格されません。 この 1 秒は、パラメータ innodb_old_blocks_time によって制御されます。

さらに、New SubList も最適化されています。New SubList 内のデータの最初の 1/4 にアクセスした場合、LRU リンク リストの先頭に移動されません。

上記は、MySQL の lru リンク リストの詳細についての簡単な分析です。MySQL の lru リンク リストの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQL ダーティ ページ フラッシュとテーブル スペースの縮小の原理の分析
  • MySQL関連のツールをいくつかお勧めします
  • MySQL クエリ キャッシュとバッファ プール
  • MySQL カーディナリティ統計の簡単な分析
  • メニューノードのすべての子ノードを再帰的に検索する MySQL メソッド
  • MySQL テーブルスペースとは何ですか?
  • MySQL の遅いクエリを見つける方法
  • MySQL フラッシュリストとダーティページフラッシュメカニズム

<<:  HTML入力ファイルコントロールはアップロードされるファイルの種類を制限します

>>:  Docker デプロイメント nginx 実装プロセスのグラフィックとテキストによる詳細な説明

推薦する

Docker管理に関する断片的な知識のまとめ

目次1. 概要2. 応用例2.1、Docker コンテナ分離名前空間2.2. Docker のフリー...

マップタグパラメータの詳細な紹介と使用例

マップ タグはペアで表示する必要があります。 <map> ....</map>...

3列レイアウトを実現するCSS3フレキシブルボックスフレックス

タイトルの通り、高さは既知で、左と右の列の幅は 300 ピクセル、中央は適応型です。弾性ボックス自体...

MySQLの大文字と小文字の区別によって発生する問題の分析

MYSQLは大文字と小文字を区別します言葉を見れば信じられます。タイトルを見れば内容がわかります。 ...

JavaScript サンドボックスの探索

目次1. シナリオ2. サンドボックスの基本機能3. iframeの実装4. Webワーカーの実装5...

グリーンスタイルのウェブデザイン作品18点の最新コレクション

トイ・ストーリー3 オンラインマーケティングウェブサイトゼンモバイル鉄から鉄へスプラウトファンドバー...

MySQL でのバイナリ型操作

この記事は主にMySQLデータベースのバイナリ型操作を紹介し、具体的な内容を通して紹介します。MyS...

MySql への新しいユーザーの追加、ユーザー用のデータベースの作成、ユーザーへの権限の割り当ての概要

1. 新しいユーザーを追加するローカルIPアクセスのみを許可する '123456' ...

vue.js ルーターのネストされたルート

序文:ルートでは、主要部分は同じでも、基礎となる構造が異なることがあります。たとえば、ホームページに...

テーブルを動的に読み込み、削除する JavaScript

この記事では、テーブルを動的に読み込み、削除するためのJavaScriptの具体的なコードを参考まで...

クリックして展開し、全文を読む機能を実現する純粋なCSS

注記記事表示リストインターフェースを開発する場合、情報の基本的な概要を提供するために記事ヘッダーコン...

MySQL における TIMESTAMPDIFF ケースの詳細な説明

1.構文TIMESTAMPDIFF(unit,begin,end); 単位に従って時間差を返します。...

指定フィールドによるMySQLカスタムリストのソートの実装

問題の説明ご存知のとおり、MySQL でフィールドを昇順に並べ替える SQL は次のとおりです (i...

Windows Server 2012 リモート デスクトップ ライセンス サーバーがライセンスを提供できず、リモート セッションが切断される

本日、会社の内部サーバーにログインしたところ、リモートアクセスができませんでした。エラー メッセージ...

HTML の表のフレームとルール属性の詳細な説明

テーブル タグの frame 属性と rules 属性は境界線の表示を制御できます。フレーム プロパ...