DBS note4:Buffer Management

目錄

1、介紹

2、緩沖池

3、處理頁面請求

4、LRU替換和時鐘策略

1)順序掃描性能 - LRU

5、最近最常使用替換策略(MRU Replacement)

1)Sequential Scanning Performance - MRU

6、練習題

1)判斷真假

2)LRU、MRU、Clock相關問題


1、介紹

我們前面簡略討論了 DBMS 的最低級別如何管理磁盤空間,以及基于頁面的數據庫系統中如何管理文件和索引。現在,我們將探討 DBMS 中這兩個級別之間的接口 - 緩沖區管理器(the buffer manager)。

緩沖區管理器負責管理內存中的頁面,并處理文件和索引管理器的頁面請求。請記住,內存空間是有限的,因此我們無法負擔得起將所有頁面存儲在緩沖池中。緩沖區管理器負責淘汰策略,即在空間填滿時選擇淘汰哪些頁面。當頁面從內存中淘汰或新頁面讀入內存時,緩沖區管理器會與磁盤空間管理器通信,執行所需的磁盤操作。

2、緩沖池

內存通過將空間劃分為頁面可以放置的幀而轉化為緩沖池。一個緩沖幀可以容納與一個頁面相同量的數據(因此一個頁面完美地適應一個幀)。為了有效跟蹤幀,緩沖區管理器在內存中為元數據表分配了額外的空間。

該表追蹤了4個信息:

1. 與內存地址唯一關聯的 “框架ID”
2. 用于確定框架當前包含哪個頁面的 “頁面ID”
3. 用于驗證頁面是否已被修改的 “臟位”
4. 用于跟蹤當前使用頁面的請求者數量的“Pin計數”

3、處理頁面請求

當從緩沖管理器請求頁面并且頁面已經存在于內存中時,頁面的引用計數會遞增,并返回頁面的內存地址。

如果頁面不在緩沖池中且仍有空間,將找到下一個空框架,并將頁面讀入該框架。頁面的引用計數設置為1,并返回頁面的內存地址。在頁面不存在且沒有空框架的情況下,必須使用替換策略確定要驅逐的頁面。

替換策略的選擇在很大程度上取決于頁面訪問模式,并通過計算頁面命中次數選擇最優策略。頁面命中是指可以在內存中找到請求的頁面而無需訪問磁盤。每個頁面未命中會產生額外的IO成本,因此良好的淘汰策略對性能至關重要。訪問模式的命中率定義為#頁面命中次數 / (#頁面命中次數 + #頁面未命中次數),或更簡單地說,#頁面命中次數 / #頁面訪問次數。

此外,如果被驅逐的頁面的臟位被設置,則將頁面寫入磁盤以確保更新被持久化。如果在內存中對頁面進行更新,則將臟位設置為1。一旦頁面被寫回磁盤,臟位就被設置為0。

一旦請求者完成其工作負載,它負責通知緩沖管理器減少其先前使用的頁面的引用計數。

4、LRU替換和時鐘策略

一個常用的替換策略是 LRU(最近最少使用)。當需要將新頁面讀入已滿的緩沖池時,將淘汰最近最少使用、引用計數為 0 且 "Last Used" 列具有最低值的未固定頁面。為了追蹤頁面的使用情況,在元數據表中添加了一個 "Last Used" 列,用于記錄頁面引用計數減少的最新時間。LRU 是一個有效的策略選擇,因為它會保留常被訪問的頁面在內存中,由于它們經常被訪問,因此很可能是最近使用的。

實現 LRU 通常可能成本較高。時鐘策略提供了一種替代實現,它使用元數據表中的一個 ref bit(最近被引用)列和一個時鐘手變量來高效地近似 LRU。使用 ref bit 可以降低空間和時間成本。只需每個框架一個比特,而不是多個比特來存儲 Last Used 值。在時間方面,緩沖管理器只需跟隨clock hand。在 LRU 中,緩沖管理器必須花費時間搜索 Last Used 列中的最小值。

時鐘策略算法將元數據表視為幀的循環列表。它在開始時將時鐘手設置為第一個未固定的幀,并在將每個頁面最初讀入幀時將其相應行的ref bit設置為1。該策略在嘗試淘汰時的工作方式如下:

1. 遍歷表中的幀,跳過固定的頁面,并在到達末尾時繞回到幀0,直到找到第一個未固定且ref bit = 0的幀。

2. 在每次迭代期間,如果當前幀的ref bit = 1,則將ref bit設置為0并將時鐘手移動到下一個幀。

3. 在到達ref bit = 0的幀時,淘汰現有頁面(如果dirty bit被設置,則將其寫入磁盤;然后將dirty bit設置為0),讀取新頁面,將幀的ref bit設置為1,并將時鐘手移動到下一個幀。

如果訪問當前在緩沖池中的頁面,則時鐘策略將頁面的ref bit設置為1而不移動時鐘手。

1)順序掃描性能 - LRU

LRU 總體上表現良好,但在一組頁面 S(其中 $|S| >$ 緩沖池大小)被多次重復訪問時,性能會受到影響。這種訪問模式稱為順序淹沒,經常在數據庫工作負載中出現,比如在表中掃描每個記錄。

為了突顯這一點,請考慮一個使用 LRU 的 3 幀緩沖池,具有以下訪問模式:

A B C D A B C D A B C D A B C D

5、最近最常使用替換策略(MRU Replacement)

另一個常用的替換策略是 MRU(最近最常使用)。與淘汰最近最少使用的未固定頁不同,MRU 策略淘汰最近最常使用的未固定頁,根據頁面的固定計數最后一次減少的時間來衡量。

1)Sequential Scanning Performance - MRU

起初使用這種策略可能會顯得違反直覺,但考慮一個使用 MRU 的 3 幀緩沖池的訪問模式:

A B C D A B C D A B C D A B C D

顯然,在發生順序淹沒訪問模式時,MRU 在頁面命中率方面遠遠優于 LRU。

6、練習題

1)判斷真假

a. 緩沖池中的每個幀都是一個磁盤頁面的大小。

真。幀的大小被定義為磁盤頁面的大小。

b. 緩沖管理器代碼(而不是文件/索引管理代碼)負責設置頁面的臟位。

假。頁面的請求者(文件/索引管理代碼)設置臟頁。

c. 臟位用于跟蹤頁面的受歡迎程度。

假。臟位用于跟蹤頁面在寫回磁盤之前是否已被修改。引用計數用于跟蹤受歡迎程度。

d. 使用LRU策略時,引用位用于在替換頁面之前為頁面提供“第二次機會”留在內存中。

假。引用位不用于LRU策略。它們用于時鐘策略。

e. 對文件進行順序掃描時,當文件小于緩沖池時,使用MRU或LRU將具有相同的命中率(從空緩沖池開始)。

真。由于我們可以將所有頁面放入內存,因此在順序掃描期間我們不需要驅逐頁面。

f. 頁面的引用計數只能由緩沖管理器遞減。

假。引用計數由請求頁面的人遞減,表示他們已經使用完畢。

2)LRU、MRU、Clock相關問題

對于以下問題,我們有一個初始為空的緩沖池,其中有4個緩沖幀。對于訪問模式:

A B D D E A E C A B C A E

a. LRU的命中率是多少?

b. 當LRU完成時,緩沖池中有哪些頁面?

c. MRU的命中率是多少?

d. 當MRU完成時,緩沖池中有哪些頁面?

e. Clock的命中率是多少?

f. 當Clock完成時,緩沖池中有哪些頁面?

詳細的訪問模式如下圖所示。在 LRU 和 MRU 中,行數對應于緩沖幀的數量,每列對應于一個單獨的訪問,其中字符表示缺失,星號表示命中。

a. 7/13

b. A, C, B, E

c. 7/13

d. E, B, D, C

e. 6/13

f. C, A, B, E

以上,DBS note4:Buffer Management

祝好。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/164922.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/164922.shtml
英文地址,請注明出處:http://en.pswp.cn/news/164922.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

華清遠見嵌入式學習——網絡編程——作業4

作業要求&#xff1a;①使用IO多路復用中的select函數實現TCP并發服務器客戶端 ②使用IO多路復用中的poll函數實現TCP并發服務器的服務器端 一、 代碼 #include <myhead.h>#define SERPORT 8888 //服務器端口號 #define SERIP "192.168.114.113"…

Samsung下origen中uboot的配置與編譯

uboot的特點&#xff1a; n代碼結構清晰 n 支持豐富的處理器與開發板&#xff0c;易于移植 n 支持豐富的用戶命令 n 支持豐富的網絡協議 n 支持豐富的文件系統 n 支持豐富的設備驅動 n 更新活躍、用戶較多、資料豐富 n 開放源代碼 n 較高的穩定性 n 不具有通用性&#xff08;不…

JavaScript編程基礎 – 布爾值(Booleans)

JavaScript編程基礎 – 布爾值(Booleans) Javascript Programming Essentials – Booleans 一個JavaScript布爾值包含兩個值中的一個&#xff0c;即 true 或者 false。 本文簡要介紹JavaScript布爾值的具體應用&#xff0c;以及可能作為對象的布爾值等。 1. 布爾值(Booleans)…

Go語言超全詳解(入門級)

文章目錄 1. Go語言的出現2. go版本的hello world3. 數據類型3.0 定義變量3.0.1 如果變量沒有初始化3.0.2 如果變量沒有指定類型3.0.3 :符號3.0.4 多變量聲明3.0.5 匿名變量3.0.6 變量作用域 3.1 基本類型3.2 指針3.2.1 指針聲明和初始化3.2.2 空指針 3.3 數組3.3.1 聲明數組3.…

java+mysql的校園兼職微信小程序(附源碼 調試 文檔)

校園兼職微信小程序 摘要一、引言二、國內外研究現狀三、系統設計四、系統實現與界面展示五、源碼獲取 摘要 本文詳述了一個基于Java和MySQL數據庫技術的校園兼職微信小程序的畢業設計。系統主要分為三種用戶角色&#xff1a;管理員、學生用戶和商家用戶。管理員擁有學生管理、…

jjwt使用說明-筆記

jjwt官網鏈接&#xff1a;https://github.com/jwtk/jjwt POM 依賴 <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-api</artifactId><version>0.12.3</version> </dependency> <dependency><grou…

華納云:linux中vsz和rss有哪些區別

在Linux中&#xff0c;VSZ(Virtual Set Size)和RSS(Resident Set Size)是兩個用于描述進程內存使用的指標&#xff0c;它們表示不同方面的內存情況。 1. VSZ&#xff08;Virtual Set Size&#xff09;: VSZ 表示進程的虛擬內存大小。 包括進程使用的所有內存&#xff0c;包括實…

Python中的函數

一、函數參數與返回值基礎知識 1、不要使用可變類型&#xff08;list等&#xff09;作為參數默認值&#xff0c;用None來代替。 參數默認值只會在函數定義階段被創建一次&#xff0c;之后無論創建多少次&#xff0c;函數內拿到的默認值都是同一個對象&#xff0c;為規避這個問…

Vue 2.0源碼分析-數據驅動

Vue.js 一個核心思想是數據驅動。所謂數據驅動&#xff0c;是指視圖是由數據驅動生成的&#xff0c;我們對視圖的修改&#xff0c;不會直接操作 DOM&#xff0c;而是通過修改數據。它相比我們傳統的前端開發&#xff0c;如使用 jQuery 等前端庫直接修改 DOM&#xff0c;大大簡化…

【python學習】基礎篇-常用模塊-collections模塊:數據結構,如列表、元組、字典和集合等

Python中的collections模塊提供了一些有用的數據結構&#xff0c;如列表、元組、字典和集合等。 以下是collections模塊中一些常用數據結構的用法&#xff1a; Counter類 Counter類是一個字典子類&#xff0c;用于計數可哈希對象。 它可以接受一個可迭代對象作為參數&#xff…

Atlassian Confluence 路徑遍歷和命令執行漏洞 (CVE-2019-3396)

漏洞描述 Confluence 是由澳大利亞軟件公司 Atlassian 開發的基于 Web 的企業 wiki。 Atlassian Confluence 6.14.2 版本之前存在一個未經授權的目錄遍歷漏洞&#xff0c;攻擊者可以使用 Velocity 模板注入讀取任意文件或執行任意命令。 漏洞環境及漏洞利用 啟動docker環境…

快來考試拿證書!KubeSphere 個人技能專業考試認證上線啦!

以容器技術和容器編排為基礎的云原生應用&#xff0c;被越來越多的企業用戶接受和使用&#xff0c;并且在生產環境中使用容器技術的比例逐年增加。Kubernetes 無疑已經成為容器編排的事實基礎&#xff0c;而依托于 Kubernetes 開發的開源容器平臺 KubeSphere 也收獲了一眾擁躉。…

vue3使用provider+ inject直接將參數由祖宗傳送給孫子

如題。在vue項目中&#xff0c;如果祖宗想將參數傳遞給孫子甚至更小一輩的組件&#xff0c;是一件麻煩事。可以通過爺爺-兒子-孫子-曾孫這樣的鏈條&#xff0c;一輩輩地傳承下去&#xff0c;但未免太繁瑣、太蠢了些&#xff1b;也可以通過store間接傳送&#xff0c;但如何觸發孫…

9-什么是迭代器,生成器,裝飾器、django的信號用過嗎?如何用,干過什么、什么是深拷貝,什么是淺拷貝,如何使用、slice操作符和list構造函數

1 什么是迭代器&#xff0c;生成器&#xff0c;裝飾器 2 django的信號用過嗎&#xff1f;如何用&#xff0c;干過什么 3 什么是深拷貝&#xff0c;什么是淺拷貝&#xff0c;如何使用 3.1 淺拷貝 3.2 深拷貝 3.3 擴展(slice操作符和list構造函數) 1 什么是迭代器&#xff0c;生成…

14 redis全量復制與部分復制

1、設置主服務器的地址和端口 首先是在從服務器設置需要同步的主服務器信息&#xff0c;包括機器IP, 端口。 主從復制的開啟&#xff0c;完全是在從節點發起的。不需要我們在主節點做任何事情。 從節點開啟主從復制&#xff0c;有3種方式 配置文件&#xff1a;在從服務器的配…

【神印王座】龍皓晨美妝勝過月夜,魔神皇識破無視,撮合月夜阿寶

Hello,小伙伴們&#xff0c;我是拾荒君。 《神印王座》國漫第82集已更新&#xff0c;拾荒君和大多數人一樣&#xff0c;更新就去看了。魔神皇楓秀&#xff0c;威嚴凜然&#xff0c;突然空降月魔宮&#xff0c;整個宮殿都在這股無與倫比的強大氣息中顫栗。為了順利躲避魔神皇的…

稻谷飄香金融助力——建行江門市分行助力鄉村振興

7月的臺山&#xff0c;稻谷飄香。在大耕戶李勝業的農田里&#xff0c;金燦燦的稻谷翻起層層稻浪&#xff0c;收割機在稻浪里來回穿梭&#xff0c;割稻、脫粒、裝車等工序一氣呵成。空氣中彌漫著豐收的喜悅。 夏糧迎豐收的背后&#xff0c;是中國建設銀行江門市分行&#xff08…

遠端WWW服務支持TRACE請求

安全掃描的時候&#xff0c;掃出來的問題&#xff0c;這里不分享如何處理&#xff0c;就只分享下&#xff0c;如何找到有問題的端口。 通過命令 curl -v -X TRACE -I ip:port&#xff0c;這里的ip和端口就是掃描出有問題的服務器地址ip以及開放的服務端口。 觀察返回值&#x…

Python基礎:生成器(Generators)和生成器表達式(Generator Expressions)詳解

生成器&#xff08;Generators&#xff09;和 生成器表達式&#xff08;Generator Expressions&#xff09;是 Python 中用于處理迭代器和序列數據的強大工具。它們允許你按需生成值&#xff0c;而不是一次性生成所有值&#xff0c;從而節省內存和提高性能。 1. 生成器&#x…

深度強化學習筆記與無線通信應用案例

這里寫自定義目錄標題 參考資料比較和分類基礎知識16.3 有模型學習16.3.1 策略評估遞歸形式&#xff1a;Bellman 等式 16.3.2 策略改進16.3.3 策略迭代16.3.3 值迭代 16.4 免模型學習on-policy off-policy16.4.1 蒙特卡羅強化學習16.4.2 時序差分學習Sarsa算法&#xff1a;同策…