OCP知识点讲解 之 LRU链与脏LRU链
一、LRU链:任何缓存的大小都是有限制的,并且总不如被缓存的数据多。就像Buffercache用来缓存数据文件,数据文件的大小远远超过Buffercache。因此,缓存总有被
一、LRU链:
为了实现LRU的功能,Oracle在Buffer cache中创建了一个LRU链表,Oracle将Buffer cache中所有内存块,按照访问次数、访问时间排序串在链表中。链表的两头我们分别叫做热端与冷端, 如下图
当你第一次访问某个块时,如果这个块不在Buffer cache中,Oracle要选将它读进Buffer cache。在Buffer cache中选择牺牲者时,Oracle将从冷端头开始选择,在上图的例子中,内存块U将是牺牲者。
如上图,新块将会被读入U,覆盖U原来的内容。这里,我们假设新块是V。但是块V不会被放在冷端头,因为冷端头的块,会很快被当作牺牲者权覆盖的。这不符合“将最后访问时间距现在最远的块作为牺牲者”的宗旨。块V是最后时间距当前时刻最近的,它不应该作为下一个牺牲者。Oracle是如何实验LRU的,我们继续看。
Oracle将LRU链从中间分为两半,一半记录热端块、一半记录冷端块。如上图,而刚刚被访问的块V,如下图:
如过再有新的块进入Buffer cache,比如块X被读入Buffer cache,它将覆盖T,并且会被移至块V的前面,如下图:
大家可以想像一下,如果按照这面的方式继续下去,最右边冷端头处的块,一定是最后一次访问时间距现在最远的块。那么,访问次数多的块是不会被选做牺牲者的,这一点Oracle是如何实现的?这很简单,Oracle一般以2次为准,块被访问2次以上了,它就有机会进入热端。
Oracle为内存中的每个块都添加了一个记录访问次数的标志位,假设图中每个块的访问次数如下:
如果现在又有新块要被读入Buffer cache,Oracle开始从冷端头寻找牺牲者,冷端头第一个块S,它的访问次数是2,香港虚拟主机,那么,它不能被覆盖,只要访问次数大于等于2的块,Oracle会认为它可能会被经常访问到,Oracle要把它移到热端,它会选择R做为本次的牺牲者:
块S会被从冷端移到热端,并且它的访问次数会被清零。此时,块R就是牺牲者了,因为它的访问次数不到两次。
新块Y覆盖了块R,并被移到了冷端块开始处,它的访问次数是1。如果块Y再被访问了一次,它的访问次数变为了2:
虽然Y的访问次数达到了两次,但它不会马上被移到热端,它仍然留在原来的位置,随着不断有新块加入,被插入到它的前面,虚拟主机,它会不断的被向后推移。
如上图,又加入了很多的新块,Y又被推到了冷端头,当再有新块进入Buffer cache时,Y不会是牺牲者,它会被移到热端头S的前面,Y后面的Z,它的访问次数没有达到2,它将会是牺牲者。
好了,这就是Oracle中Buffer cache管理LRU的原理。按照这种方式运作,Oracle可以把常用的块尽量长的保持在Buffer cache中。而且,每有新块进入Buffer cache,Oracle都会从冷端头处,从右向左搜索牺牲块。因为越靠近冷端,块的访问次数有可能越少、最后的访问时间离现在最远。好了,LRU链还没有讲完,下面,我们再讨论一下脏块与脏LRU链的问题。
二、脏块与脏LRU链:
Oracle中修改块的规则是只对Buffer cache中的块进行修改,并不直接修改磁盘中的块。如果要修改的块不在Buffer cache中,Oracle会先将它读入Buffer cache,再在Buffer cache中进行修改。当Buffer cache中的块被修改后,Oracle会把它标记为“脏”块。脏块含有脏数据,脏数据就是用户修改过的数据。Oracle会定期的将脏块写到磁盘中。有一个专门的后台进程就是专门负责写脏块到磁盘的,它就是DBWn。我们也把DBWn写脏块到磁盘这个过程叫做刷新脏块,刷新过后,脏块就不脏了,又变成了干净块。其实,有一个块A,如果Buffer cache中此块的数据和磁盘上块中数据不一致,香港服务器,那么,这个块就是脏块。否则,就是干净块。当修改完成后,因为Oracle只修改Buffer cache,因此,块中数据和磁盘肯定不一致,这时块就是脏块。当块被刷新后,块被写到磁盘,那么,磁盘中块数据和Buffer cache中块的数据又是一致的,此时,块就又变成了干净块。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Python は現在最も人気のあるプログラミング言語であり、これから多くの初心者の友人が日々学習の仲間入りをすると思います。しかし、いくら学びやすい言語とはいえ、基本的な概念や基礎知識は数多くあり、初心者にとって一度に多くのことをマスターするのはやはり難しいものです。今日は、網羅的とも言える Python 関連の知識チートシートをたくさん集めました。将来、お母さんは、みんなが知識を覚えられなくて心配する必要がなくなります。 Python の基礎 Pythonbasics このチートシートには、変数のデータ型からリスト文字列、環境のインストールからよく使われるライブラリの使い方まで、Python の基礎知識がすべて記載されており、網羅的と言えます。初心者向けPython

HTML キャッシュ メカニズムの秘密: 重要な知識ポイント、具体的なコード例が必要 Web 開発では、パフォーマンスが常に重要な考慮事項です。 HTML キャッシュ メカニズムは、Web ページのパフォーマンスを向上させるための鍵の 1 つです。この記事では、HTML キャッシュ メカニズムの原理と実践的なスキルを明らかにし、具体的なコード例を示します。 1. HTML キャッシュ機構の原理 Web ページにアクセスする際、ブラウザは HTTP プロトコルを介してサーバーに HTML ページの取得を要求します。 HTML キャッシュ メカニズムは、HTML ページをブラウザーにキャッシュします。

Java を使用して LRU キャッシュ アルゴリズムを実装する方法 はじめに: コンピューター サイエンスの分野では、キャッシュはデータの読み取りと書き込みの速度を向上させるために一般的に使用される最適化テクノロジです。 LRU (LeastRecently Used) は、データが最後にアクセスされた時刻に基づいてキャッシュからデータを削除するかどうかを決定する一般的なキャッシュ置換戦略です。この記事では、Java 言語を使用して LRU キャッシュ アルゴリズムを実装する方法を紹介し、詳細なコード例を示します。 LRU キャッシュ アルゴリズムの原理 LRU キャッシュ アルゴリズムは時間ベースです。

1. Python キャッシュ ① キャッシュ機能 キャッシュは、最近使用したデータや頻繁に使用するデータをメモリに保存するためにアプリケーションで使用できる最適化テクノロジです。この方法でデータにアクセスすることは、ディスク ファイルを直接読み取るよりも高速です。 Feedly のような、さまざまなソースからニュースを取得して集約して表示するニュース集約 Web サイトを構築するとします。ユーザーがニュースを閲覧すると、バックグラウンド プログラムが記事をダウンロードし、ユーザーの画面に表示します。キャッシュ技術が使用されていない場合、ユーザーが同じ記事を複数回閲覧するために切り替えた場合、その記事を複数回ダウンロードする必要があり、非効率的で不親切です。より良いアプローチは、各記事を取得した後、コンテンツをデータベースなどにローカルに保存し、次にユーザーがアクセスしたときに保存することです。

MySQL は世界で最も人気のあるリレーショナル データベース管理システムの 1 つであり、その信頼性、高いセキュリティ、高いスケーラビリティ、および比較的低コストの理由から広く使用されています。 MySQL データ型は、さまざまなデータ型の保存方法を定義し、MySQL の重要な部分です。この記事では、MySQL のデータ型と実際のアプリケーションで注意する必要がある知識のポイントについて詳しく説明します。 1. MySQL データ型の分類 MySQL データ型は次のカテゴリに分類できます。 整数型: TINYINT、

ネットワークセキュリティ入門:初心者にとって必須の知識ポイントは何ですか?近年、インターネットの急速な発展に伴い、ネットワークセキュリティへの注目が高まっています。しかし、多くの人にとって、ネットワーク セキュリティは依然として未知の海です。では、ネットワーク セキュリティを始めるために、初心者はどのような重要な知識を習得する必要があるのでしょうか?この記事ではそれを整理します。 1. ネットワーク攻撃と脅威 まず第一に、ネットワーク攻撃と脅威の種類を理解することは、ネットワーク セキュリティを始めるために習得しなければならない知識点です。フィッシング攻撃、マルウェア、ランサムウェアなど、サイバー攻撃にはさまざまな種類があります。

Oracle データ型の明らかに: 理解する必要がある知識ポイント、必要な具体的なコード例 Oracle は、世界有数のデータベース管理システムの 1 つとして、データの保存と処理において重要な役割を果たしています。 Oracleでは、データ型はデータベースにおけるデータの格納形式、範囲、操作方法を定義する非常に重要な概念です。この記事では、Oracle データ型のさまざまな知識ポイントを明らかにし、特定のコード例を通じてその使用法と特性を示します。 1. 一般的なデータ型 文字データ型

重要な知識ポイント: CSS レスポンシブ レイアウトの必須スキルを習得するには、特定のコード サンプルが必要です。現代のインターネット時代では、モバイル デバイスを使用して Web ページを閲覧する人が増えているため、Web ページのレスポンシブ レイアウトが特に重要になっています。レスポンシブ レイアウトとは、さまざまな画面サイズやデバイスの種類に応じて Web ページのレイアウトとスタイルを自動的に調整し、さまざまなユーザー エクスペリエンスに適応できることを意味します。 CSS レスポンシブ レイアウトのスキルを習得することは、フロントエンド開発者にとって必須です。この記事では、いくつかの重要な知識ポイントとテクニックを紹介し、具体的なコード例を示します。メディアを使用する
