溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

PostgreSQL的DB buffer問(wèn)題分析

發(fā)布時(shí)間:2022-01-11 17:09:35 來(lái)源:億速云 閱讀:252 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容介紹了“PostgreSQL的DB buffer問(wèn)題分析”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

首先今天要說(shuō)的這部分buffer 如果要用其他的數(shù)據(jù)庫(kù)來(lái)理解的話,ORALCE 中有PGA  和 SGA, 今天要說(shuō)的這部分就是 SGA, 數(shù)據(jù)庫(kù)中共享內(nèi)存。而postgresql 中這塊共享內(nèi)存和其他的數(shù)據(jù)庫(kù)不同的地方,在于大部分?jǐn)?shù)據(jù)庫(kù)MYSQL 設(shè)置自己的 innodb_buffer_pool_size 一般是要設(shè)置成總內(nèi)存的 60-80% , SQL SERVER  一般也會(huì)吃進(jìn)大部分系統(tǒng)內(nèi)存,并且一般不會(huì)再釋放,我們可以理解,這些數(shù)據(jù)庫(kù)(mysql, oracle ,sql server)都有自己的內(nèi)存管理器,并且傾向性的獨(dú)占。 

反觀postgresql 一般建議在設(shè)置share_buffer 的建議是系統(tǒng)總內(nèi)存的25%,這與上邊的三個(gè)數(shù)據(jù)庫(kù)相比有點(diǎn)背道而馳的趕腳。所以就引出了今天的問(wèn)題,到底POSTGRESQL 在內(nèi)存的使用和緩存的使用中有什么“與眾不同”。

select current_setting(name),* from pg_settings where name like 'share%';

PostgreSQL的DB buffer問(wèn)題分析

postgresql 在大部分的情況中是傾向于使用OS 的緩沖來(lái)完成工作的,也就是讀取的數(shù)據(jù)都是要經(jīng)過(guò)OS CACHE 的,跳過(guò)system cache 大致只有WAL writes。那問(wèn)題是為什么要需要buffer cache ,如果直接可以使用使用OS  cache 不就可以了。

那到底為什么要有buffer cache 原因主要在于buffer cache 有數(shù)據(jù)庫(kù)獨(dú)有的算法,在postgresql 的 buffer cache 中可以通過(guò)近似LRU 的算法將經(jīng)常被用到的數(shù)據(jù),“粘”在buffer cache 中,增加數(shù)據(jù)庫(kù)自身緩沖的利用率。

那可能又有問(wèn)題提出,為什么PG 建議將buffer cache 設(shè)置到總體的內(nèi)存的25%,而不是更大,更大不是更好嗎?  實(shí)際上根據(jù) PG9.X PG 10 的相關(guān)書(shū)籍中提到的,如果這樣可能適得其反,書(shū)中提出的觀點(diǎn)是,PG 在操作時(shí),有一部分是通過(guò)系統(tǒng)的CACHE 會(huì)更直接。

所以這就引出另一個(gè)問(wèn)題,我們?cè)趺丛O(shè)置共享內(nèi)存(LINUX系統(tǒng)中的)讓系統(tǒng)更好的為數(shù)據(jù)庫(kù)服務(wù),下面是一個(gè)腳本,可以得到設(shè)置LINUX 共享內(nèi)存的大小值

PostgreSQL的DB buffer問(wèn)題分析

./shmsetup >> /etc/sysctl.conf

這位同學(xué)又問(wèn)了另一個(gè)問(wèn)題,就是既然PG 有 buffer cache 和 OS cache 那這樣的設(shè)計(jì)會(huì)浪費(fèi)內(nèi)存的空間。

這里想說(shuō)的是不會(huì),大家可以想一下,數(shù)據(jù)庫(kù)的系統(tǒng)buffer cache 是可以黏住經(jīng)常訪問(wèn)的數(shù)據(jù),而系統(tǒng)的的緩沖是沒(méi)有這樣的功能的,也就是系統(tǒng)的緩沖和數(shù)據(jù)庫(kù)的BUFFER CACHE 之間存在相同的數(shù)據(jù)的可能性是比較低,一個(gè)數(shù)據(jù)會(huì)經(jīng)常被訪問(wèn)才能放到緩沖中,而如果一個(gè)經(jīng)常被訪問(wèn)的數(shù)據(jù)放到數(shù)據(jù)庫(kù)的 BUFFER 中,就不會(huì)再訪問(wèn)系統(tǒng)的CACHE ,所以系統(tǒng)就會(huì)清理掉他,系統(tǒng)的緩沖和數(shù)據(jù)庫(kù)的緩沖能存在一樣的數(shù)據(jù)的可能性就比較低。

“PostgreSQL的DB buffer問(wèn)題分析”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI