偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

PostgreSQL IO優(yōu)化技巧

數(shù)據(jù)庫 PostgreSQL
如果有人問“信創(chuàng)數(shù)據(jù)庫學(xué)啥比較好”,從今后的工作機(jī)會以及學(xué)習(xí)資料的普及程度來說,我首先推薦的就是PostgreSQL。

?PostgreSQL近些年熱度越來越高,特別在國內(nèi),基于其生態(tài)的數(shù)據(jù)庫產(chǎn)品種類繁多。如果有人問“信創(chuàng)數(shù)據(jù)庫學(xué)啥比較好”,從今后的工作機(jī)會以及學(xué)習(xí)資料的普及程度來說,我首先推薦的就是PostgreSQL。

不過目前大多數(shù)PostgreSQL用戶都沒有認(rèn)真配置數(shù)據(jù)庫,讓其達(dá)到最佳的使用效果,并充分發(fā)揮出硬件的性能特征。其中數(shù)據(jù)庫IO的優(yōu)化是重中之重,IO延時較大會導(dǎo)致所有的SQL都會變慢。今天的這篇文章將介紹提高 PostgreSQL IO 性能的八個技巧。

首先,使用相應(yīng)速度更快,吞吐能力更強(qiáng)的存儲硬件:提高 IO 性能的最重要因素之一是用于存儲數(shù)據(jù)庫文件的存儲硬件。在關(guān)鍵系統(tǒng)中,一般會考慮使用固態(tài)硬盤 (SSD) 或硬件 RAID 陣列以獲得更快的讀寫速度。高性能低延時的集中式SAN存儲是傳統(tǒng)大型數(shù)據(jù)庫的主要存儲介質(zhì),不過現(xiàn)在很多PG數(shù)據(jù)庫都在單機(jī)部署,使用服務(wù)器本地存儲,從而降低使用成本。在本地存儲中充分優(yōu)化存儲性能,提高存儲介質(zhì)可靠性是十分關(guān)鍵的。用本地SATA SSD盤可以有效提高數(shù)據(jù)庫的整體性能,在HDD上增加高性能緩沖也是性價比很高的做法。為企業(yè)應(yīng)用設(shè)計一個性能優(yōu)秀,價格適中的本地存儲方案,是確保PG IO性能的關(guān)鍵。

第二,調(diào)整 shared_buffers:shared_buffers 配置參數(shù)確定 PostgreSQL 用于在內(nèi)存中緩存數(shù)據(jù)頁的內(nèi)存量。調(diào)整此參數(shù)以匹配系統(tǒng)上可用的內(nèi)存量以獲得最佳性能。由于PG數(shù)據(jù)庫使用double buffer機(jī)制,因此不同的業(yè)務(wù)負(fù)載,shared_buffers參數(shù)的設(shè)置會有所不同。PG管網(wǎng)建議配置25%的物理內(nèi)存給shared_buffers使用,這是一種當(dāng)你不了解業(yè)務(wù)場景與數(shù)據(jù)分布時的中庸的配置方案。舉個例子,如果你的物理內(nèi)存是256GB,而你的常用數(shù)據(jù)是100GB,那么設(shè)置一個128GB的shared_buffers有可能是比較好的配置。設(shè)置shared_buffers的首要原則是,不能讓操作系統(tǒng)產(chǎn)生較多的換頁,如果OS經(jīng)常性出現(xiàn)換頁,那么你要評估一下是不是由于shared_buffers占用了過多的物理內(nèi)存,導(dǎo)致OS內(nèi)存使用率過高引起的。

第三,優(yōu)化WAL的配置:WAL是 PostgreSQL 中的一項關(guān)鍵功能,可確保事務(wù)的持久性和一致性。配置 wal_buffers 參數(shù)以匹配您的工作負(fù)載并確保最佳 WAL 性能。調(diào)整 wal_buffers 的值時,重要的是要考慮生成 WAL 數(shù)據(jù)的速率,增加 wal_buffers 的值有助于降低磁盤寫入頻率并提高性能,不過在普通的負(fù)載下,調(diào)整wal_buffers并不能看到數(shù)據(jù)庫性能的提升,只有當(dāng)WAL寫入BUFFER的速度大于Walwriter寫盤的速度的時候,加大wal_buffers才會有特別明顯的性能提升。作為一般規(guī)則,建議將 wal_buffers 的值設(shè)置為磁盤塊大小的小倍數(shù),16 MB。除了調(diào)整wal_buffers之外,調(diào)整max_wal_size等參數(shù)也能有效地減少WAL導(dǎo)致的性能下降,另外CHECKPOINT的優(yōu)化也能大幅減少WAL的寫出量,從而優(yōu)化WAL的性能。

第四,IO分區(qū):IO分區(qū)是一種將數(shù)據(jù)和索引分布在多個磁盤上的技術(shù),它可以通過減少磁盤 I/O 爭用來幫助提高 IO 性能??紤]使用表和索引分區(qū)來利用這種性能提升。將WAL存儲與單獨的高性能存儲也是IO分區(qū)的一種十分常用的做法,對于高并發(fā)環(huán)境的數(shù)據(jù)庫IO性能提升十分有效。利用tablespace將熱表分散到不同的存儲上去也是十分有效的IO分區(qū)的方法。不過大家要注意的是,要使用IO分區(qū),首先要確保存放PG數(shù)據(jù)庫的磁盤或者磁盤組本身是分區(qū)的,具有一定的隔離性,如果你在一個磁盤組上分出多個邏輯卷,然后將PG的存儲做IO分區(qū),那么用處就不大了。

第五,預(yù)熱緩存:pg_prewarm 擴(kuò)展可用于預(yù)熱具有頻繁訪問數(shù)據(jù)的緩存,減少未來查詢所需的磁盤 I/O 量。以前大家都做過很多測試,發(fā)現(xiàn)在PG數(shù)據(jù)庫中某條SQL執(zhí)行計劃不變的情況下,執(zhí)行速度差異很大,最終大家都發(fā)現(xiàn)了如果SQL訪問的大多數(shù)數(shù)據(jù)都在shared buffers中或者在OS的FILE CACHE中,那么執(zhí)行效率是較高的。因此在PG數(shù)據(jù)庫中對熱數(shù)據(jù)做預(yù)熱緩沖是有效提升數(shù)據(jù)庫性能的方法。Pg_prewarm是一個十分常用的緩沖預(yù)熱插件。

圖片

安裝完插件后,我們可以使用select pg_prewarm(‘tablename’)來預(yù)熱某張表的數(shù)據(jù)。在某些大型統(tǒng)計報表開始之前先預(yù)熱數(shù)據(jù)是提高性能的很好的方法,用于預(yù)熱數(shù)據(jù)的PG插件也很多,大家可以根據(jù)需要選擇使用。

第六,優(yōu)化檢查點:檢查點是將共享緩沖區(qū)緩存中的臟頁刷新到磁盤的過程。降低檢查點的頻率和大小有助于減少磁盤 I/O 并提高性能。優(yōu)化檢查點性能的一些技術(shù)包括增加 checkpoint_timeout 和 checkpoint_completion_target 配置參數(shù),以及使用更快的存儲硬件來存儲數(shù)據(jù)和 WAL 文件。

第七,調(diào)整CBO策略參數(shù):調(diào)整 effective_cache_size,random_page_cost等多個參數(shù)都是CBO優(yōu)化器來評估各種操作的成本的重要參數(shù),在一個有數(shù)萬甚至數(shù)十萬條SQL語句的數(shù)據(jù)庫系統(tǒng)而言,CBO能夠產(chǎn)生合理的執(zhí)行計劃對于數(shù)據(jù)庫性能至關(guān)重要,PG數(shù)據(jù)庫沒有Oracle那么強(qiáng)大的SQL優(yōu)化工具與優(yōu)化手段來輔助,因此設(shè)置好這些與CBO產(chǎn)生合理執(zhí)行計劃緊密相關(guān)的參數(shù)十分重要。effective_cache_size 配置參數(shù)用于估計 PostgreSQL 可用的磁盤緩存量,從而確定掃描數(shù)據(jù)的成本。random_page_cost 配置參數(shù)確定隨機(jī)磁盤 I/O 相對于順序磁盤 I/O 的成本。設(shè)置此參數(shù)以準(zhǔn)確反映系統(tǒng)上隨機(jī)磁盤 I/O 的成本。據(jù)磁盤類型的不同,對 random_page_cost 的設(shè)置也會有所不同:對于 HDD,可以設(shè)置為 4.0 到 4.5;對于 SSD,可以設(shè)置為 1.0 到 1.5。如果使用中央化的 SAN 存儲,可以根據(jù)其具體配置和性能進(jìn)行調(diào)整,為了設(shè)置合理的值,需要對你的存儲的隨機(jī)讀寫性能進(jìn)行測試。PG中還有幾個類似的參數(shù),可能會影響到CBO生成執(zhí)行計劃,如果你發(fā)現(xiàn)你的PG數(shù)據(jù)庫中存在較多的錯誤的執(zhí)行計劃,那么可以嘗試調(diào)整一下這些參數(shù):seq_page_cost、cpu_tuple_costcpu_index_tuple_cost、cpu_operator_cost。

第八,操作系統(tǒng)參數(shù)優(yōu)化:主要是在VM的后臺寫、前臺寫、臟塊刷新策略、內(nèi)存換頁策略等方面進(jìn)行優(yōu)化,這方面我以前已經(jīng)寫過多篇文章介紹,在這里就不重復(fù)了,有興趣的朋友可以去翻閱一下我以前的發(fā)文。

綜上所述,這八個技巧可以大大提高 PostgreSQL 的 IO 性能。請務(wù)必仔細(xì)考慮您的硬件設(shè)置并配置適當(dāng)?shù)膮?shù)以獲得最佳結(jié)果。?

責(zé)任編輯:武曉燕 來源: 白鱔的洞穴
相關(guān)推薦

2024-04-12 08:28:38

優(yōu)化查詢語句PostgreSQL索引

2013-12-26 13:19:26

PostgreSQL優(yōu)化

2024-04-08 09:00:30

PostgreSQ數(shù)據(jù)庫EXPLAIN 命令

2020-12-17 07:52:38

JavaScript

2018-05-25 15:04:57

數(shù)據(jù)庫PostgreSQL查詢優(yōu)化器

2018-05-23 13:47:28

數(shù)據(jù)庫PostgreSQL查詢優(yōu)化

2011-03-25 13:43:54

Cacti優(yōu)化

2024-09-14 11:23:19

2011-07-01 16:05:22

SEO

2011-03-10 10:09:33

LAMP優(yōu)化

2011-05-25 20:53:26

SEO

2009-06-16 16:39:49

Hibernate性能

2011-03-09 10:55:33

LAMP優(yōu)化技巧

2010-08-10 10:17:44

Flex內(nèi)存

2013-04-07 09:53:24

Windows系統(tǒng)優(yōu)化

2011-07-11 15:26:49

性能優(yōu)化算法

2013-09-26 09:44:35

Windows優(yōu)化技巧

2013-06-08 14:19:05

性能優(yōu)化KVM

2019-08-21 10:53:29

.NET性能優(yōu)化

2011-06-14 14:17:23

性能優(yōu)化系統(tǒng)層次
點贊
收藏

51CTO技術(shù)棧公眾號