您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Postgresql IO該怎么如何分析,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
今天要講的是POSTGRESQL I/O系統(tǒng)的及周邊一些系統(tǒng)的學習sharing .
首先我們先看一個圖,這是一個PG內(nèi)存結(jié)構(gòu)的簡圖
但今天不是要說內(nèi)存,而是要說關于buffer cache的問題,
其實說白了就是數(shù)據(jù)在內(nèi)存和磁盤之間的交互過程,如果提取的數(shù)據(jù)不在內(nèi)存中,則需要從磁盤將數(shù)據(jù)讀入到 page change 并且如果數(shù)據(jù)在內(nèi)存中改變了,需要將數(shù)據(jù)刷入到磁盤的一個過程。
同時我們需要了解以下幾點
緩沖寫:通常是非阻塞的
緩沖讀取:通常阻塞
順序?qū)懕入S機寫快
覆蓋較大數(shù)據(jù)塊的操作通常更快
除此之外,checkpointer ,Background writer , wal writer 等等這些都會用到I/O 系統(tǒng)。所以調(diào)優(yōu)PostgreSQL I/O對于構(gòu)建高性能、可伸縮的數(shù)據(jù)庫架構(gòu)是必不可少的。
如:
1 數(shù)據(jù)是否有預讀機制,何種的預讀機制能更有效的利用內(nèi)存,而不是大量的I/O 讀取。
2 更好的并發(fā)讀取,可以采用更多的線程將需要的數(shù)據(jù)同時讀取到系統(tǒng)中
由于POSTGRESQL 本身的buffer cache 并不全部HOLD 主, 而是聯(lián)合OS的buffer 共同的對數(shù)據(jù)庫進行處理,我們對比四種情況
1 沒有 postgresql buffer ,OS buffer
2 沒有 僅有OS 的cache 沒有postgresql cache
3 POSTGRESQL OS cache 和 POSTGRESQL buffer 共有的情況
所以POSTGRESQL 對相關的操作做了更多的優(yōu)化例如
1 當工作集不適合共享緩沖區(qū)時,將數(shù)據(jù)寫回操作系統(tǒng)
2 減少后端寫的操作
3 提高IO吞吐量/利用率,特別是隨機IO
4 減少隨機I/O ,將其更多合并,變?yōu)轫樞騃/O
5 通過shared_buffer映射數(shù)據(jù)結(jié)構(gòu)與排序支持
與其他的數(shù)據(jù)庫不同,postgresql 更加強調(diào)系統(tǒng)在數(shù)據(jù)存取中的作用,更新的系統(tǒng)例如LINUX 的核心的版本的提升,對postgresql本身是有利的。
在Postgresql 中有一些需要注意的地方
1 Checkpoint 的設置 ,例如 max_wal_size , min_wal_size, checkpoint_timeout and comkpoint_completion_target 等配置參數(shù)會提高你的或者降低你的磁盤系統(tǒng)的負擔,可以將臟頁集中的或者分散的刷入你的磁盤系統(tǒng)。
2 需要注意你每天的事務量,WAL arvhive 文件的歸檔數(shù)量, 監(jiān)控你checkpoint 的頻率,以及以上的參數(shù)是否適合你當前繁忙或者不繁忙的數(shù)據(jù)庫 系統(tǒng)。
3 Vacuum ,清理已經(jīng)廢棄的數(shù)據(jù)也是很重要的,防止表膨脹,而vacuum 也會造成磁盤的系統(tǒng)的負擔,同時也要對 log_autovacuum_min_duration 進行關注,查看自動的真空的時間長度。一般來說自動真空就可以滿足大部分系統(tǒng)的需求,但對于大表或者熱表,可以在夜間工作不繁忙的情況下,進行手動或者半自動的真空,例如repack 等
4 與MYSQL 在某些方面有一些一致性,例如盡量給每個查詢分配適合的work_men尤其在一些經(jīng)常用到 group by , order by 的系統(tǒng),增加在內(nèi)存可以解決的排序活動,避免更多要在磁盤進行排序后在給出結(jié)果的方式。
5 更合理有效的利用表空間,如同其他的數(shù)據(jù)庫系統(tǒng),將一個數(shù)據(jù)庫分散在多個物理磁盤的方式,在POSTGRESQL 也是適用的,并且如果將 wal 日志放置在高級的I/O系統(tǒng),例如SSD 磁盤,也是對系統(tǒng)性能有效的保證。
6 一般來說,在配置POSTGRESQL 中更傾向于將系統(tǒng)shared_buffer 進行合理的設置,但會忽略 effective_cache_size 的設置,如果想進行一個初始的設置可以將 shared_buffer 設置為總內(nèi)存的 25%, 將effictive_cache_size設置為系統(tǒng)的額 50% 或更大。重要的 effictive_cache_size 的設置是和你查詢的性能有很大的關系。
關于Postgresql IO該怎么如何分析就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。