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

從一道PG知識的選擇題談起,你悟到了些什么?

數據庫 其他數據庫
稍微懂點PG數據庫的人不難回答,答案是A、B、C。一些Oracle DBA可能會覺得這個答案有點出乎意料。因為在Oracle數據庫中,回寫DB CACHE臟數據的只有DBWR。

昨天一個網友問我一道關于PG的選擇題:Postgresql數據庫中哪些進程可以將shared buffers中的臟數據回寫到數據文件?A) BACKEND B) BGWRITER C)CHECKPOINTER D) WALWRITER。

稍微懂點PG數據庫的人不難回答,答案是A、B、C。一些Oracle DBA可能會覺得這個答案有點出乎意料。因為在Oracle數據庫中,回寫DB CACHE臟數據的只有DBWR。可能這些人不太清楚的CKPT負責回寫部分臟數據是80年代早期關系型數據庫的共同特點,Oracle數據庫中,CKPT也曾經負責過寫臟塊。后來隨著數據庫規模的增大,CKPT的功能被獨立出來了,只負責CKPT的推進工作,不再負責寫臟塊了。在Oracle數據庫中,為了更快的將臟塊回寫,通過將DB CACHE分區,采用多個DBWR進程可以并發寫臟塊,從而滿足大型數據庫的需要。

PG在刷臟塊的算法方面的設計比較傳統,這種設計是從90年代一脈相承的,改起來成本較大,所以就一直沿用下來了。只不過讓backend也去寫臟塊,這未免也有點太出乎一般人的想象了。這會產生幾個比較奇怪的現象,一個是某條SQL語句,可能在執行計劃相同、數據量相同的情況下,不同的時間執行,其執行效率有較大的不同。另外一個奇怪現象是某條SELECT語句可能會產生較多的寫操作。實際上Oracle數據庫中也會存在類似的現象,這種情況是由延遲塊清理產生的。當一個大型事務結束后,ITL的狀態清理可能并沒有完成,如果馬上有SELECT操作訪問這些數據,那么執行SELECT的前臺進程將負責完成這些塊的清理,這時候select操作也會產生大量的寫操作,產生大量的REDO,同時這條SELECT比起平時會慢很多。    

圖片圖片

通過pg_stat_bgwriter系統表中的buffers_backend和buffers_backend_fsync可以查詢到系統中的backend寫臟塊和fsync的計數。

圖片圖片

從我們的一個D-SMART的PG數據庫中看到一個十分神奇的情況,按理說被用來寫臟塊的bgwriter居然很小(buffers_clean),大多數臟塊都是checkpointer和backend寫的 。如果你去檢查一下你們的PG數據庫,可能bgwriter寫臟塊的比例也不是很高。

為什么會出現這種情況,為什么大量的寫臟塊工作不由本應該處理臟塊的 bgwriter去做,而讓Backend去寫臟塊呢?這方面的資料很少,我們只能從 PG的代碼上去找找答案。首先我們看一下src/backend/storage/bufmgr.c,在這里可以看到backend從shared buffers中分配空閑buffer的算法。一般我們都能理解從shared buffers中查找空閑的buffer,如果找不到非臟的空閑塊,那么就有可能找到一個存儲了臟數據的數據塊,這時候才需要backend去寫臟塊。在Oracle數據庫中,前臺進程是順著lru鏈的冷端去查找空閑緩沖塊的,如果前臺進程發現了某個沒有被Pin住的塊是臟塊,就會把這個數據塊移到lru-w中,然后繼續往下搜索,如果連續搜素到了N個臟塊,無法獲得所需要的空閑塊的時候,就會發出一個free buffer requests的事件,讓DBWR加快刷臟塊,然后再去重試。從PG的代碼上看,PG的大體思想類似,不過策略要復雜得多。    

圖片圖片

BufferAlloc里包含了backend查找某個buffer的頂層邏輯。不閱讀一下還真沒發現PG這方面的代碼邏輯會搞得如此復雜。要想訪問某個buffer,先要生成一個BUFFER TAG(關于這方面的詳細算法請參考我2021年寫過的一篇8000多字的長篇《PG SHARED BUFFER POOL的優化》)。然后查找這個BUFFER。    

圖片圖片

如果BUFFER存在,還有兩種可能性,一種是成功的PIN住了這個BUFFER,那么就可以返回這個BUFFER了。不過BUFFER存在還有一種可能性是無法PIN住,無法PIN住的原因是可能被其他的會話PIN住了,也可能是一些其他的原因。這種情況,Oracle被稱為read by other session或者buffer busy waits。這個部分不是我們今天分析的重點,我們繼續往下看代碼。    

圖片圖片

GetVictimBuffer函數通過時鐘掃描算法去找一個空閑的buffer。這里就涉及到查找空閑shared buffers了。我們下鉆到這個函數的代碼中去繼續分析。

圖片圖片

首先調用StrategyGetBuffer去找一個BUFFER。    

圖片圖片

如果發現找到的是一個臟塊,那么就把臟塊刷盤,這就是BACKEND也需要刷臟塊的原因之一。作為數據庫緩沖的算法,我們肯定應該盡可能的找到非臟塊來復用,總是讓BACKEND寫臟塊肯定會降低數據庫的整體性能。    

StrategyGetBuffer函數在src/backend/buffer/freelist.c中定義。首先,它會檢查是否有一個策略對象(strategy),如果有,就調用GetBufferFromRing函數,從策略對象的環形緩沖區(ring buffer)中獲取一個緩沖區。如果獲取成功,就返回這個緩沖區,并設置from_ring標志為true。如果沒能正常找到free buffer,它會嘗試喚醒bgwriter,讓它刷新臟的緩沖區到磁盤,以便釋放一些空間。接下來,backend會檢查StrategyControl->firstFreeBuffer變量,如果大于等于0,就表示有空閑的緩沖區,那么就通過一個循環從空閑鏈表中獲取一個緩沖區。這部分算法與Oracle的free buffer requests十分類似。

此時如果空閑鏈表為空,backend會進入另一個循環,嘗試從victim pool中選擇一個緩沖區,victim pool是一個循環隊列,存儲了最近被訪問過的緩沖區的編號。從nextVictimBuffer的當前位置開始,順時針掃描victim pool,尋找一個既不被鎖定,也沒有被引用,也不是臟的緩沖區。如果找到了,就返回這個緩沖區,并將其從victim pool中移除。如果沒有找到合適的緩沖區,它會繼續掃描victim pool,尋找一個既不被鎖定,也沒有被引用,但是是臟塊的緩沖區。如果找到了,就將這個緩沖區的內容寫入磁盤,然后返回這個緩沖區(這是代碼中backend中另外一個寫臟塊的地方),并將其從victim pool中移除,并添加到策略對象的環形緩沖區中。

我們先不去吐槽PG在這塊代碼的質量問題,僅僅從算法來看,backend直接刷臟塊的機會也應該是比較小的。那么為什么我們會在pg_stat_bgwriter中看到如此奇葩的數據呢?這里面其實也有一個十分有意思的邏輯。

首先是關于buffers_backend這個指標,本身這個指標就有一定的誤導性,我們今天看的代碼上包含了處寫臟塊的地方,其實不用看代碼我們都能想到第三處,那就是VACUUM。因為backend中還包含了auto vacuum,vacuum操作等寫臟塊的統計數據,因此我們可能會被這個指標誤導。PG社區中十多年前就有人希望PG代碼中把這些情況區分開來,從而讓buffers_clean更有指向性,不過沒有獲得PG社區核心研發的認同。    

另外一點是PG數據庫的策略是盡可能讓數據在內存中多存放一段時間,而不急著把臟數據寫盤。因此在PG數據庫中,還是將檢查點進程作為寫臟塊的主力,如果你的系統中的buffers_alloc增長很緩慢的話,那么只要按照checkpointer的節奏慢慢寫臟塊就可以了,backend總是能夠找到所需要的buffer,因此也就沒必要讓bgwriter去寫臟塊了。這種算法對于早些年比較緩慢的IO子系統來說是十分友好的,不過對于當今高性能的IO系統來說,不夠高效,比較適合目前IO性能一般的云上小型數據庫,而對于采用高性能IO設備的大型數據庫來說,并不一定是很優化的。

基于上面的分析我們可以了解到,如果你看到你的系統中的buffers_clean總是為0或者總是慢速增長,那么并不說明系統存在問題,而是說明你的系統寫負載還不算太高,bgwriter還犯不著去幫你刷盤而已。對于IO性能還不錯的系統,或者說規模不算太大的數據庫來說,PG的這種刷臟塊的方法還是可以勝任的,在一些超大型系統中,可能這方面會成為瓶頸。我看到Polardb-PG、openGauss等基于PG代碼的數據庫產品中,對這方面都做了一些優化,引入了專門的機制來替換BGWRITER。目前還沒有對這些代碼進行分析,因此不知道這方面的改善如何。

今天分析PG這方面源代碼的另外一個收獲是從中學到一些PG的SHARED BUFFERS相關的優化策略的。首先shared buffers不能設置得太少,否則backend真正開始大量刷臟塊了,那么SQL的性能是會受到很大的影響的。其次是CHECKPOINTER的相關參數設置要合理,根據底層IO的能力配置合適的參數,讓CHECKPOINTER刷盤的速度能夠跟得上buffers_alloc的速度。如果我們發現buffers_clean的增長比較快了,那么說明目前系統的負載對shared buffers 有一定的壓力了,那么我們就需要考慮調整bgwriter相關的參數了。       

最后的源碼鏈接是我兩年多前寫的一篇關于PG SHARED BUFFERS的內部結構的分析文章,文章很長,有8000多字,有興趣的朋友可以閱讀一下。文中有些觀點可能和今天的文章有些不大一致了,如果存在這方面的觀點,那么就以今天的文章為準吧。對PG數據庫的理解都是一點一點的從模糊到清晰,從不大準確到相對準確的。認知的提升是從一個個案例,一段段源碼的分析中逐漸完成的。

責任編輯:武曉燕 來源: 白鱔的洞穴
相關推薦

2021-04-29 21:06:49

有序數組算法

2018-03-13 16:04:45

Promise執行順序

2024-02-07 01:32:48

頁面前端項目

2022-08-02 07:57:54

RAC故障運維

2022-01-19 11:39:15

數據治理大數據數據

2023-04-26 01:25:05

案例故障模型

2021-03-27 10:59:45

JavaScript開發代碼

2024-08-12 15:44:06

2018-01-29 15:25:05

前端JSDate對象

2018-04-26 11:23:01

Linuxfork程序

2021-04-13 08:50:21

JS作用域面試題

2015-01-14 19:48:06

移動CRM

2024-03-18 13:32:11

2020-03-26 15:29:35

全球關注涉密會議

2021-03-02 11:29:50

算法算法分析前端

2023-11-29 12:12:24

Oceanbase數據庫

2021-10-28 11:40:58

回文鏈表面試題數據結構

2010-08-18 10:27:56

2009-01-08 21:21:45

程序員筆記

2016-01-04 09:27:56

TCP網絡協議
點贊
收藏

51CTO技術棧公眾號

一区二区视频免费| 熟女少妇内射日韩亚洲| free性m.freesex欧美| 粉嫩绯色av一区二区在线观看| 欧美激情aaaa| 国产男男chinese网站| yiren22亚洲综合| 悠悠色在线精品| 免费av一区二区三区| 中文字幕视频一区二区| 欧美激情精品久久久六区热门| 亚洲护士老师的毛茸茸最新章节| av在线免费观看国产| 日本在线视频1区| 精品一区二区在线视频| 性色av一区二区三区免费| 999福利视频| 久久99精品国产自在现线| 欧美日韩国产区一| 日韩中文字幕在线视频观看| 免费看美女视频在线网站| 成人97人人超碰人人99| 成人精品一区二区三区| 天天综合网久久综合网| 亚洲欧美亚洲| 日韩中文理论片| 性欧美丰满熟妇xxxx性仙踪林| 豆花视频一区| 欧美色视频一区| 免费观看日韩毛片| 美女精品导航| 日韩一区中文字幕| 日韩影院一区| 性xxxfllreexxx少妇| 国产成人在线电影| 成人网在线免费观看| 波多野结衣电车| 免费欧美在线| 欧美激情啊啊啊| 无码人妻精品一区二区三区夜夜嗨| 国产探花在线精品| 亚洲精品第一国产综合精品| 国产成人av片| 少妇精品在线| 欧美日韩高清一区| 亚洲这里只有精品| 成人黄页网站视频| 欧美三级中文字幕在线观看| 天堂社区在线视频| 免费高清视频在线一区| 在线免费观看一区| 992kp快乐看片永久免费网址| 日本电影在线观看| 亚洲愉拍自拍另类高清精品| 99热这里只有精品免费| 18+激情视频在线| 亚洲精品国产无天堂网2021| 久久人妻无码一区二区| 色呦呦在线免费观看| 一区二区三区在线视频免费| 青草全福视在线| 先锋影音在线资源站91| 一区二区三区国产| 青青草成人免费在线视频| 免费毛片b在线观看| 欧美日韩国产色视频| 99999精品视频| 户外露出一区二区三区| 欧美色综合影院| 一区二区久久精品| 91成人精品在线| 亚洲国产精品久久精品怡红院| 污片免费在线观看| 伊人成综合网yiren22| 在线电影av不卡网址| www.黄色com| 欧美成人嫩草网站| 88国产精品欧美一区二区三区| 日日噜噜噜噜人人爽亚洲精品| 日韩精品三区四区| 成人a在线视频| 成人av免费播放| 99久久免费精品高清特色大片| 欧美大香线蕉线伊人久久| av网站在线免费观看| 亚洲激情中文1区| 国产精品无码av在线播放| 免费观看成人性生生活片| 在线电影欧美成精品| 久久久午夜精品福利内容| 国产在线日韩精品| 欧美成人免费一级人片100| 粉嫩aⅴ一区二区三区| 日日夜夜免费精品| 91九色偷拍| 黄色在线网站| 一区av在线播放| 国产精品无码av无码| 日韩精品一区二区三区中文字幕 | 久久免费视频一区| 一区二区三区欧美成人| 操人在线观看| 欧美日韩精品一二三区| 亚洲一区二区乱码| 亚洲有吗中文字幕| 日本午夜精品理论片a级appf发布| 91在线观看喷潮| 91亚洲精品乱码久久久久久蜜桃| 亚洲午夜精品久久| 天堂8中文在线最新版在线| 3751色影院一区二区三区| 欧美 日本 国产| 欧美91精品| 国产精品久久久久久影视| 乱色精品无码一区二区国产盗| 欧美国产丝袜视频| 91国视频在线| 欧美一区在线观看视频| 一区二区三区国产视频| 一级片免费网址| 国产成人啪免费观看软件| 午夜精品美女久久久久av福利| 欧美激情护士| 欧美成人a在线| 国产免费嫩草影院| 久久久久国内| 精品无人乱码一区二区三区的优势| а√中文在线8| 欧美亚洲综合在线| 91精彩刺激对白露脸偷拍| 影音先锋亚洲一区| 99视频在线| 最近中文字幕免费mv2018在线| 欧美日韩一区成人| 少妇愉情理伦三级| 日韩国产欧美在线播放| 国产欧美日韩伦理| 高h视频在线播放| 日韩美女视频一区二区在线观看| 欧美视频一区二区在线| 裸体一区二区三区| 手机成人av在线| 久久久国产精品网站| 日韩在线视频二区| 国产又爽又黄免费软件| 国产精品国产自产拍高清av| 国产又大又黄又粗又爽| 日韩免费在线| 成人黄色免费网站在线观看| 免费av在线播放| 884aa四虎影成人精品一区| 国产美女高潮视频| 国产一区二区免费看| 91传媒免费视频| 99这里只有精品视频| 久久久久久久久久亚洲| 天天操天天操天天| 欧美色图在线视频| 久久国产柳州莫菁门| 蜜臀99久久精品久久久久久软件| 亚洲二区三区四区| 国产成人久久精品一区二区三区| 久久天天躁狠狠躁夜夜躁2014 | 香蕉久久免费电影| 在线观看91久久久久久| 91精品中文字幕| 一区二区三区精品视频在线| 成年女人免费视频| 午夜影院日韩| 亚洲一区二区三区涩| 精品国产亚洲日本| 国语自产精品视频在线看一大j8| 日韩偷拍自拍| 欧美日韩国产综合一区二区| 亚洲综合网在线| 99久久精品情趣| 9久久婷婷国产综合精品性色 | 精品视频久久| 成人网欧美在线视频| 2021中文字幕在线| 国产一区二区三区在线观看视频| 一级片在线免费观看视频| 一区二区三区鲁丝不卡| 添女人荫蒂视频| 美女视频一区二区三区| 精品国产一区二区三区无码| 国产午夜一区| 5g影院天天爽成人免费下载| 自拍偷拍亚洲视频| 久久精品国产99国产精品澳门 | 无码人妻丰满熟妇区毛片18| 欧美熟乱15p| 国产厕所精品在线观看| 成人在线爆射| 欧美日韩国产第一页| 国内精品一区视频| 精品日产卡一卡二卡麻豆| 亚洲av无码精品一区二区| 一区二区三区四区视频精品免费| 亚洲狠狠婷婷综合久久久久图片| 久久69国产一区二区蜜臀| 成人精品视频在线播放| 日韩dvd碟片| 久久久久高清| 日韩精品一区二区三区免费视频| 国产精品福利网站| 国产精品xx| 欧美成人小视频| 国产福利免费在线观看| 亚洲福利在线播放| a在线观看免费| 欧美婷婷六月丁香综合色| 青青操免费在线视频| 亚洲人成网站精品片在线观看| 白丝女仆被免费网站| 成人手机电影网| 捷克做爰xxxⅹ性视频| 日本中文字幕一区| 91传媒久久久| 99视频在线精品国自产拍免费观看| 中文字幕日韩一区二区三区不卡 | 可以免费看的黄色网址| 精品一区二区三区在线| 久久伦理网站| 久久精品国产亚洲5555| 99在线视频首页| 精品国产三区在线| 亚洲xxxxx| 青青国产精品| 国产综合久久久久| 欧美xxxx性| 国产精品久久久久久久久久东京 | 中文字幕电影av| 国产日韩欧美麻豆| 老牛影视av老牛影视av| 久久综合网色—综合色88| av2014天堂网| 成人免费不卡视频| 又黄又色的网站| 成人晚上爱看视频| 亚洲香蕉中文网| 成人av午夜电影| 中文字幕第3页| av在线这里只有精品| 丰满熟女人妻一区二区三区| 国产成人av一区二区三区在线观看| 日韩不卡的av| 国产成人自拍在线| 国产精品欧美性爱| 懂色av一区二区夜夜嗨| zjzjzjzjzj亚洲女人| 成人av免费在线| 亚洲黄色免费在线观看| 久久综合色8888| 黄色aaa视频| 国产精品乱人伦中文| 天堂网avav| 亚洲一区二区四区蜜桃| 在线观看国产亚洲| 91久久精品午夜一区二区| 这里只有精品国产| 911国产精品| 丰满少妇一级片| 日韩av中文字幕在线播放| 精品av中文字幕在线毛片| 一区二区福利视频| av毛片在线免费| 性色av一区二区三区红粉影视| 一区二区电影免费观看| 国产精品普通话| 成人午夜888| 国产精品视频入口| 色综合中文网| 免费观看黄色的网站| 韩日精品视频| 成人三级视频在线播放 | 91免费精品国偷自产在线| 日韩一二三区在线观看| 韩国成人一区| 日韩免费特黄一二三区| 日韩一级片免费视频| 久久一区精品| 杨幂一区二区国产精品| 99久久精品国产毛片| 中文字幕黄色网址| 一区二区不卡在线播放| 精品国产xxx| 欧美一级二级在线观看| 免费看男男www网站入口在线| 俺去了亚洲欧美日韩| 爱搞国产精品| 成人精品在线视频| 性人久久久久| 米仓穗香在线观看| 视频一区二区不卡| 久久精品aⅴ无码中文字字幕重口| 久久久精品免费免费| 久草网站在线观看| 在线视频亚洲一区| 手机看片国产1024| 欧美成人精品影院| 欧美gay视频| 国产经品一区二区| 国产精品88久久久久久| 日本三级免费网站| 国产精品一级片| 少妇av片在线观看| 精品久久久久久久久久久| 国产毛片一区二区三区va在线 | 免费黄在线观看| 亚洲成va人在线观看| 一级黄色片免费看| 亚洲欧美制服丝袜| 超碰97免费在线| 亚洲一区二区免费在线| 久久影院100000精品| 国产日产欧美视频| 懂色av中文一区二区三区| 国产成人自拍网站| 欧美日韩一区成人| 国产中文在线视频| 欧美在线亚洲一区| 国产一区调教| 人人妻人人澡人人爽欧美一区双| 久久se精品一区精品二区| 干b视频在线观看| 欧美午夜性色大片在线观看| 人妻中文字幕一区| 久久99青青精品免费观看| 欧洲午夜精品| 在线成人性视频| 免费成人你懂的| 一区二区三区在线观看免费视频| 狠狠久久亚洲欧美专区| 日批免费在线观看| 97国产一区二区精品久久呦| 无人区乱码一区二区三区| 一区二区日本| 麻豆91精品91久久久的内涵| 国产一二三av| 欧美巨大另类极品videosbest| 91网页在线观看| 国产一区二区丝袜| 久久密一区二区三区| 亚洲国产日韩欧美在线观看| 日本一区二区不卡视频| 亚洲一级特黄毛片| 久久久www成人免费精品| 婷婷成人av| 亚洲精品少妇一区二区| 成人一区在线看| 日韩视频免费观看高清| 亚洲精品一区中文| 日韩欧美看国产| 色姑娘综合av| 九色|91porny| 1024手机在线视频| 精品sm在线观看| 日本а中文在线天堂| 日韩av图片| 九九在线精品视频| 国产成人精品av久久| 亚洲精品二三区| 欧美人体一区二区三区| 亚洲日本精品国产第一区| 国产在线精品一区二区 | 欧美性受极品xxxx喷水| 日韩伦理在线电影| 成人av资源| 免费中文字幕日韩欧美| 国产一区二区三区视频播放| 日韩一卡二卡三卡四卡| 成年男女免费视频网站不卡| 日产中文字幕在线精品一区 | 亚洲尤物视频网| 在线精品福利| 日本理论中文字幕| 日韩一区二区电影在线| 黄色18在线观看| 永久免费精品视频网站| 成人av资源网站| 中文av免费观看| 欧美极品少妇与黑人| 精品九九在线| 美女网站视频在线观看| 欧洲一区在线电影| 免费在线看污片| 天堂精品视频| 成人97人人超碰人人99| 91麻豆成人精品国产| 欧美亚洲另类在线| 91精品亚洲| 精品无码一区二区三区| 日韩精品一区二区三区在线观看| 东京一区二区| 国产爆乳无码一区二区麻豆| 国产亚洲制服色| 欧美 日韩 国产 成人 在线| 国产精品亚洲片夜色在线| 亚洲在线色站|