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