精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

CMU 15445 學習之Buffer Pool

開發 前端
架構

什么是 buffer pool

磁盤管理介紹完畢之后,在來看看內存的 buffer pool 管理的內容。

Buffer Pool 本質上就是一塊共享內存區域,其目的主要是對磁盤上的 page 進行緩存,盡量減少磁盤 IO,提升數據庫系統的性能。

前面講存儲模塊的時候提到過,內存的訪問速度更快,并且磁盤 page 的訪問讀取在時間和空間上具有局部性的特征,所以一次被訪問到的 page,加載到內存之后,有可能被再次訪問,這樣可以避免頻繁從磁盤中加載 page。

buffer pool 對內存區域劃分為了被稱為 frame 的小塊,每個 frame 就是緩存了磁盤的 page 內容。

此外,還需要維護一個 page table,它是一個哈希表,存儲的是 page id 對 buffer pool 中 frame 的一個映射,此外還需要存儲一些 page 的元數據信息,例如 page 是否為臟頁、page 的引用計數等等。

圖片

對于 page table 的訪問,一般要保證并發安全,因為在多線程環境下,對于同一個內存中 frame 的讀寫不能同時進行。

PostgreSQL 中對于 buffer pool 的描述及代碼可參考:https://github.com/postgres/postgres/blob/master/src/backend/storage/buffer/README

buffer pool 優化

前面簡要說明了 buffer pool 的基本概念,在實際使用的時候,會針對 buffer pool 進行各種各樣的優化,下面依次介紹常見的幾種。

Multiple Buffer Pool

buffer pool 并不是一塊內存進行劃分,不同的數據庫系統中,有不同的用法。

大多數系統都實現了可以開辟多個 buffer pool,避免多個線程對同一個 buffer pool 的鎖競爭,這樣能夠更大程度上提升數據讀寫的效率。具體的實現可以是多樣化的,例如:

  • 創建多個 buffer pool 的實例
  • 每個數據庫分配一個 buffer pool
  • 同類型的磁盤 page 分配一個 buffer pool

一般有兩種方式來實現一條 tuple 到 buffer pool 的映射:object id 和 hashing。

Object ID 一般可以是一條 tuple 的隱藏列(例如在 PostgreSQL 中叫做 ctid),它主要記錄了 tuple 的磁盤存儲位置。根據這個 object id 就能夠知道我們需要訪問哪個 buffer pool,然后再獲取其中的 page 進行數據讀寫。

圖片


另一種 hash 的方式,可以將 tuple 的某些信息進行 hash 操作,然后再定位到某一個 buffer pool上。

圖片

Pre-Fetching

prefetch 一般叫做預讀取,例如當進行一個查詢時,如果一個 page 不在 buffer pool,我們需要將 page 加載上來,此時我們可以通過一些預讀取策略,預先將 page 記載到 buffer pool 中,這樣下次查詢的時候,不用讀磁盤,能夠提升整體的響應性能。

以一個簡單的順序掃描來說明,例如下圖中,加載所有的 page 對表進行順序掃描,如果沒有 prefetch 的話,加載一個 page 之后,上層執行引擎處理完畢, 然后再次加載另一個 page,這樣的話每次都會在加載的時候等待 page 加載完畢,效率較低。

圖片


如果是索引掃描,葉子節點指向的 page 有可能并不是連續的,但是作為數據庫系統內部,我們可以識別出來,加載想要的 page 到 buffer pool 中(這也是上一篇文章中提到的數據庫系統一般會自己管理內存,而不依賴于 mmap)。

例如下圖,葉子節點的 page 分別是 3 和 5,這樣的話加載的時候就跳過中間不需要的 page。

圖片


Scan Sharing

scan sharing 的思路總體來說就是如果一個 query 想要掃描一個表,此時已經有另一個查詢也正在掃描這個表了,那么可以將兩個查詢的操作合并起來,共享同一個 page 的內容。

這個優化在大多數數據庫中都有實現,例如 Sql Server、Oracle、PostgreSQL。

下面是一個簡單的例子,假設有一個查詢需要全表掃描,并且表內容分布在 page 0-5 中,那么它會依次讀取所有的 page 到 buffer pool 中。

圖片


此時 Buffer Pool 滿了,根據淘汰策略,在加載 page3 的時候,需要淘汰掉一個 page 出去,這里我們假設淘汰的是 page0。

圖片


淘汰掉 page0 后,然后將 page3 加載進來。

如果此時有另一個查詢,也需要對這個表進行全表掃描,在沒有任何優化的情況下,它也從頭開始讀寫該 table 的所有 page。首先它也會去加載 page0,但實際上 page0 剛剛從 Buffer Pool 中被替換出去。

圖片


于是一個優化策略是將兩個查詢的掃描指針會合起來,共享同一個 Buffer Pool 中的內容,等到前面的結束之后,第二個查詢再把前面沒掃描到的 page 繼續掃描完。

Buffer Pool Bypass

在一些特殊的情況下,我們可能并不需要 Buffer Pool,例如順序掃描磁盤 page,如果我們需要加載的磁盤 page 的分布是連續的,我們可以直接加載磁盤數據,因為是順序 IO,性能仍然能夠不錯,并且省去了 Buffer Pool 換入換出的開銷。

PostgreSQL demo

下面以 postgres 為例,說明一下數據庫 buffer pool 的具體行為。

postgres 的默認 buffer pool 大小是 128MB,當進行查詢時,我們可以加上explain (analyze, buffers)前綴,打印 sql 執行的時間和詳細計劃,以及 buffer pool 的使用情況。

當首次啟動系統時,沒有任何數據在 buffer pool 中,因此一次查詢需要從磁盤中獲取所有的表數據,可以看下面的這個例子:

圖片

read 55140 表示從磁盤中獲取的 page 數量。

當我們再次運行這個查詢時,由于在前一次查詢中已經將部分數據緩存在 buffer pool 中,因此相應的執行計劃就會發生一些改變:

圖片

shared hit 表示命中了 buffer pool 中的數據,比前一次查詢從磁盤中獲取的 page 就會更少了。

buffer pool 淘汰策略

由于 buffer pool 是一塊容量有限的內存區域,并且大小通常比存儲在磁盤上的數據容量小得多,因此當 buffer pool 已滿時,如果有新的數據需要加載,則需要合適的淘汰替換策略,來保證將舊的數據剔除掉,插入新的數據。

LRU

lru 即 Least Recently Used,最近最少使用原則,這是應用較為廣泛的一種緩存淘汰算法了,思路也比較簡單直觀。

可以為每個 page 分配一個訪問的時間戳,當訪問了一個 page,則更新該時間戳。當需要淘汰舊的 page 時,直接選擇最久未被訪問的 page 即可。

Clock

clock 時鐘淘汰算法跟 LRU 的思路比較類似,但是實現上不太一樣。這種算法將 page 區域看做一個環,每個  page 都有一個標記為叫做 reference bit,初始情況下都為 0。

圖片


如果 page 被訪問到了的話,則會將 reference bit 設置為 1。

圖片


一般會設定一個定時任務,然后我們可以順序掃描每一個 page,如果 bit 值為 1,則說明該 page 被訪問過,就將 bit 重置為 0。如果 bit 為 0,則說明該 page 沒有被訪問過,則直接清除這個 page。

LRU-K

前面提到的 LRU 算法雖然思路簡單,但是也存在一些問題,如果一個頻繁訪問的熱點 page,在短時間內被僅訪問一次的頁面所替換,那么會使緩存命中率下降,這種情況通常叫做緩存污染。

所以我們可以提升頁面訪問的次數上限,當達到 k 次時才能夠替換其他的頁面,所以不難理解傳統的 LRU 算法可以看做是 LRU-1。

Localiztion

這種淘汰策略也能夠緩解 LRU 可能產生的緩存污染問題,它實際上比較類似前面提到的 multi buffer pool,當多個 query 進行時,它可以從全局的 buffer pool 中獲取 page 數據,但是當淘汰數據時,它可以自己再維護一個 buffer pool,在這個 buffer pool 中淘汰數據,不會對全局的 buffer pool 產生影響。

例如 PostgreSQL 在對表順序掃描時會維護一個本地的 ring buffer 緩存。

Dirty Page

最后再來看一個簡單的概念 dirty page。

dirty page,即臟頁,指的是緩存在 buffer pool 中的數據被修改了,但是還沒有來得及寫到磁盤中。每個 page 都有一個相應的標志位,來表示自己是否是臟頁。

如果一個 page 不是臟頁,那么在替換該 page 時,系統可以直接將它從 buffer pool 中移除,反之,則需要將 page 中的數據持久化。

一般我們可以啟動一個后臺進程,定期對臟頁進行處理,當將臟頁數據寫到磁盤后,可以將臟頁從 buffer pool移除,也可以直接重置 page 的臟頁標志位。

這一節講述了內存緩沖區的管理,淘汰策略,以及它是怎么和磁盤 page 進行交互的,下一節會開始講關于索引的部分。

責任編輯:武曉燕 來源: roseduan寫字的地方
相關推薦

2022-10-08 00:00:00

SQLDDL數據

2022-10-09 08:53:06

存儲容量SSD

2022-10-17 08:49:47

2022-10-30 10:03:20

B+數據庫數據

2021-02-19 22:18:11

數據庫系統管理

2022-09-30 11:08:44

MySQLPostgreSQLOracle

2022-03-26 08:49:13

MySQL數據存儲

2019-06-24 05:05:40

緩沖池查詢數據InnoDB

2022-03-22 15:05:15

MySQL緩沖池

2021-03-01 18:37:15

MySQL存儲數據

2011-08-16 09:48:27

SQLPLUS學習筆記SQL Buffer

2010-05-07 19:15:18

Oracle flas

2024-10-23 08:47:46

2023-10-07 15:56:49

三鏈表緩存頁flush鏈表

2023-05-03 21:34:34

MySQL狀態變量

2024-07-17 09:10:27

2025-04-08 08:20:00

2012-12-06 10:00:48

InnoDBMySQL

2025-10-30 08:00:00

2021-11-29 09:38:12

設計模式對象池模式Object Pool
點贊
收藏

51CTO技術棧公眾號

欧美国产免费| jvid一区二区三区| 久久人人超碰精品| 国产日韩欧美视频| 日日骚一区二区三区| 欧美18xxxx| 欧美日韩一区精品| 国产日本在线播放| 高清日韩av电影| 国产精品原创巨作av| 91精品国产高清久久久久久| 日本美女bbw| 老司机凹凸av亚洲导航| 欧美主播一区二区三区美女| 欧美人与动牲交xxxxbbbb| 黄色小视频在线免费观看| 国产精品性做久久久久久| 91成人天堂久久成人| 激情五月激情综合| 日韩精品导航| 日韩一级欧美一级| 91激情视频在线| 99re6在线精品视频免费播放| 国产精品色在线观看| 国产欧美日韩视频一区二区三区| 中文字幕无线码一区 | 亚洲人久久久| 天堂网在线播放| 国产成人精品免费视频网站| 国产精品视频一区国模私拍 | 91久久精品国产91性色tv | 成人福利片网站| 久久精品视频一区| 好吊妞www.84com只有这里才有精品| 中文字幕男人天堂| 免费久久99精品国产自在现线| 欧美日韩成人在线播放| 后入内射无码人妻一区| 亚洲欧美成人vr| 国产精品久久国产愉拍| 国产丝袜一区二区三区免费视频| 日韩欧美中文视频| 99亚洲伊人久久精品影院| 精品欧美一区二区三区| 黄色一级片黄色| 在线中文字幕第一页| 国产精品视频yy9299一区| 日韩精品一区二区三区外面| 香蕉视频黄在线观看| 成人性生交大片免费看中文网站| 51国偷自产一区二区三区| 国产精品永久久久久久久久久| 三级欧美韩日大片在线看| 26uuu另类亚洲欧美日本一| 久久精品久久精品久久| 国产精品hd| 欧美激情xxxx性bbbb| 免费一级全黄少妇性色生活片| 亚洲成av人片一区二区密柚| 久久精品人人做人人爽| 99鲁鲁精品一区二区三区| 欧美丰满日韩| 久久综合色影院| 亚洲天堂网av在线| 欧美国产高清| 国外成人免费在线播放| 天堂网一区二区三区| 国产日韩欧美一区| 热久久美女精品天天吊色| 久久久久在线视频| 麻豆一区二区三区| 亚洲自拍小视频| 性欧美一区二区三区| 成人午夜伦理影院| 精品视频一区二区| 国产在线视频网站| 中文字幕一区视频| 99视频精品全部免费看| 国产美女高潮在线| 色8久久精品久久久久久蜜| 天美星空大象mv在线观看视频| 黄色成人小视频| 日韩一区二区免费高清| 日韩精品人妻中文字幕有码 | 久草免费在线观看视频| 日韩视频在线一区二区三区| 国产成人精品在线观看| 亚洲字幕av一区二区三区四区| 国产一区二区三区日韩| 国内外成人免费视频| 国产精品久久久久久久龚玥菲 | 男女爱爱视频网站| av中文在线资源库| 欧美在线视频日韩| 女教师高潮黄又色视频| 中国av一区| 久久精品国产免费观看| 日韩成人av毛片| 蜜桃免费网站一区二区三区| 91沈先生播放一区二区| 色视频免费在线观看| 中文字幕视频一区| av免费观看大全| 国产亚洲欧美日韩精品一区二区三区 | 成人精品视频一区二区三区尤物| 欧美一级爱爱| 日本在线观看高清完整版| 欧美性猛xxx| 麻豆精品国产传媒| 日韩欧美一区二区三区在线视频 | 91免费视频黄| 成人教育av| 日韩无一区二区| 免费网站在线高清观看| 亚洲经典在线看| 91香蕉电影院| 国产黄色片在线观看| 亚洲成av人**亚洲成av**| 在线观看免费黄网站| 欧美色图婷婷| 欧美激情按摩在线| 国产麻豆免费观看| 国产精品私人影院| 99爱视频在线| 红杏成人性视频免费看| 久久久97精品| 中文字幕第315页| www.亚洲在线| 无码日本精品xxxxxxxxx| 久久亚洲人体| 国产亚洲精品久久久久久| 欧美不卡视频在线观看| 高潮精品一区videoshd| 中国黄色录像片| 日韩精品第二页| 中文字幕一区电影| 最近中文字幕在线免费观看 | 免费看成人片| а√天堂资源官网在线资源| 日韩精品一区二区三区在线观看 | 日韩电影免费| 精品高清一区二区三区| 亚洲av成人片无码| 韩国久久久久| 成人综合电影| 超碰97免费在线| 精品久久久久一区二区国产| 国产精品白嫩白嫩大学美女| 国产一区二区不卡在线| 久久精品国产精品亚洲精品色| 久久99久久久精品欧美| 日韩中文字幕在线播放| 国产精品高潮呻吟av| 中文字幕欧美一区| 做a视频在线观看| 88国产精品视频一区二区三区| 成人免费看黄网站| h片在线免费观看| 日韩女优电影在线观看| 日本一二三区不卡| 久久综合九色综合欧美亚洲| 黄色a级片免费| 国产一区二区观看| 国产精品香蕉国产| 中文字幕有码在线观看| 精品三级av在线| 国产成人亚洲欧洲在线| 久久亚洲影视婷婷| 欧美三级午夜理伦三级富婆| 国产高清一区| 成人动漫视频在线观看免费| 91禁在线看| 亚洲人成网站在线播| 一区二区视频免费观看| 亚洲欧美经典视频| 国产精品一区二区无码对白| 国产一级特黄a高潮片| 国产福利小视频在线观看| 狠狠躁夜夜躁人人爽超碰91| 国产三级国产精品| 日韩经典一区二区| 成年人免费观看的视频| 一区二区三区亚洲变态调教大结局 | 亚洲视频香蕉人妖| 伊人精品视频在线观看| 亚洲精品色图| 亚洲精品中文字幕乱码三区不卡| 国产亚洲高清一区| 78m国产成人精品视频| 超碰免费97在线观看| 欧美一区二区精品| 青青操免费在线视频| 国产精品欧美久久久久一区二区| 99热这里只有精品2| 亚洲综合不卡| 国产高潮呻吟久久久| 日本成人中文| 91九色视频导航| 亚洲人成在线网站| 日韩视频在线免费| 天天综合天天综合| 欧美日韩国产综合久久| 日本熟妇色xxxxx日本免费看| 国产欧美综合色| 国产av一区二区三区传媒| 日韩不卡一二三区| 91免费黄视频| 亚洲在线久久| 日韩欧美一区二区三区四区| 超碰97久久国产精品牛牛| 国产精品久久婷婷六月丁香| 丁香花在线影院| 日韩视频免费在线观看| 黄色av网址在线免费观看| 欧美va在线播放| 91成人在线免费| 欧美性猛交xxxx| 久久免费小视频| 国产精品第五页| 人妻av无码一区二区三区| 成人免费高清视频在线观看| 日本黄色的视频| 日韩精品亚洲一区| 男人揉女人奶房视频60分| 91精品秘密在线观看| 日韩免费三级| 色综合综合色| 六月婷婷久久| 好吊妞国产欧美日韩免费观看网站| 91人人爽人人爽人人精88v| 精品肉辣文txt下载| 5252色成人免费视频| 爱情岛亚洲播放路线| 欧美疯狂做受xxxx高潮| 黄色视屏免费在线观看| 中文字幕亚洲一区二区三区| 激情小说 在线视频| 亚洲精品美女在线观看播放| 亚洲精品国产精品乱码不卡| 日韩一区二区视频在线观看| 91精品人妻一区二区三区果冻| 欧美在线不卡视频| 中文在线观看av| 欧美亚洲尤物久久| 丰满熟女人妻一区二区三| 色综合婷婷久久| 久久精品视频7| 日韩欧中文字幕| 精品国产乱子伦| 色欧美88888久久久久久影院| 日日噜噜噜噜人人爽亚洲精品| 激情懂色av一区av二区av| 日韩精品成人一区| 欧美日韩在线免费观看| 久久亚洲天堂网| 欧美性猛交xxxx免费看| 天堂网中文字幕| 在线观看一区不卡| 中国a一片一级一片| 欧美日韩免费在线视频| 一级黄色片在线| 欧美一区二区视频在线观看2020| 99国产精品久久久久久久成人| 日韩一级免费一区| 视频一区 中文字幕| 精品视频一区在线视频| 国产在线观看黄| 最近2019年日本中文免费字幕| 免费超碰在线| 欧美老肥婆性猛交视频| 国产丝袜精品丝袜| 欧美制服第一页| 国产成人精选| 99国精产品一二二线| 美女视频免费精品| 欧美一区二区在线| 欧美大黑bbbbbbbbb在线| 麻豆一区二区三区在线观看| 在线不卡欧美| 亚洲狼人综合干| 国产精品一区一区三区| 中文在线一区二区三区| 国产精品午夜电影| 国产乱国产乱老熟300| 精品国产成人在线| 亚洲视频在线免费播放| 精品国产一区二区亚洲人成毛片| 日韩精品福利| 久久精品国产一区二区电影| 爱福利在线视频| 国产精品久久久久影院日本| 视频精品一区| 青青成人在线| 欧美精品综合| 免费裸体美女网站| 国产一区二三区| 毛片网站免费观看| 亚洲日本在线视频观看| 亚洲图片在线视频| 欧美一区2区视频在线观看| 午夜一区在线观看| www.亚洲天堂| 亚洲欧洲高清| wwwxx欧美| 欧美一区三区| 成人午夜视频在线观看免费| 精品影视av免费| 风间由美一二三区av片| 亚洲日本一区二区三区| 天天干天天色综合| 日韩免费视频一区二区| eeuss影院www在线播放| 午夜精品一区二区三区在线视| 四虎影视精品永久在线观看| 九色91在线视频| 欧美精品97| 怡红院亚洲色图| 久久久久久久久伊人| 久草视频免费在线| 欧美日韩成人高清| 韩国精品视频| 欧洲亚洲女同hd| 成人在线视频你懂的| 男人天堂成人网| 另类小说视频一区二区| 精品成人av一区二区三区| 亚洲国产精品欧美一二99| 国产精品久久久久久久久毛片| 亚洲午夜小视频| 国产日韩电影| 精品一区久久久| 亚洲黄色一区| 精品人妻一区二区乱码| 亚洲免费视频中文字幕| 一级片在线观看视频| 一级做a爰片久久毛片美女图片| 草莓视频丝瓜在线观看丝瓜18| 亚洲自拍欧美色图| 中文av一区| 欧美精品 - 色网| 亚洲视频中文字幕| 97久久人国产精品婷婷| 中文字幕日韩综合av| 欧美日韩精品免费观看视欧美高清免费大片 | 人人妻人人澡人人爽欧美一区| 久久电影网电视剧免费观看| 免费看的黄色录像| 欧美在线免费观看亚洲| 成年人在线看| 国产精品久久久久久中文字 | 欧美 另类 交| 久久成人久久爱| 午夜成人亚洲理伦片在线观看| 欧美福利一区二区| av免费在线免费| 99电影网电视剧在线观看| 欧美另类女人| 国产chinese中国hdxxxx| 午夜天堂影视香蕉久久| 五月婷婷开心中文字幕| 欧美一级成年大片在线观看| 少妇一区二区视频| 国产野外作爱视频播放| 国产精品美女久久久久久久| 一级α片免费看刺激高潮视频| 久久精品视频99| 视频亚洲一区二区| 久色视频在线播放| 国产日韩一级二级三级| 亚洲天堂中文字幕在线| 欧美巨大黑人极品精男| 日韩av中文字幕一区| 无码日韩人妻精品久久蜜桃| 国产精品久久久久精k8 | 国产98色在线|日韩| 国产成人一区二区三区影院在线| 亚洲人成在线一二| 日本一区二区三区中文字幕| 欧美交换配乱吟粗大25p| eeuss影院一区二区三区| 超碰在线97观看| 精品中文字幕在线2019| 五月国产精品| 九九精品久久久| 亚洲777理论| 第三区美女视频在线| 亚洲最大的免费| 国产精品视区| 国产麻豆视频在线观看| 亚洲大胆人体在线| 精品视频一区二区三区四区五区| 熟妇熟女乱妇乱女网站| 93久久精品日日躁夜夜躁欧美| 18国产免费视频| 97精品国产97久久久久久免费| 成人三级视频| 欧美一级片黄色| 666欧美在线视频| 亚洲男人av| 久久久久福利视频|