PostgreSQ服務(wù)器配置參數(shù)在優(yōu)化和增強(qiáng)數(shù)據(jù)庫(kù)性能方面發(fā)揮著重要作用。PostgreSQL的主要可調(diào)設(shè)置位于名為 postgresql.conf 的純文本文件中,該文件位于數(shù)據(jù)庫(kù)目錄結(jié)構(gòu)的底部。這些配置參數(shù)中的大多數(shù)大致分為以下幾類:
1、數(shù)據(jù)庫(kù)連接參數(shù)
2、記錄參數(shù)
3、內(nèi)存參數(shù)
下面,小編就詳細(xì)給大家介紹一下PostgreSQL服務(wù)器配置的參數(shù)指南。
一、連接參數(shù)
有許多配置參數(shù)可以控制人們?nèi)绾芜h(yuǎn)程和本地連接到數(shù)據(jù)庫(kù)。
1、監(jiān)聽地址
任何需要從遠(yuǎn)程系統(tǒng)連接的安裝都需要更改listen_addresses以允許連接。默認(rèn)情況下僅允許來(lái)自登錄到與數(shù)據(jù)庫(kù)服務(wù)器相同系統(tǒng)的用戶的本地連接。一種常見的方法是接受來(lái)自任何地方的傳入連接——就主配置文件而言,如下所示:listen_addresses = '*'
2、最大連接數(shù)
Max_connections是我們?cè)趇nitdb生成的postgresql.conf中總是會(huì)發(fā)現(xiàn)設(shè)置為一個(gè)值的設(shè)置之一,通常為100。因?yàn)槊總€(gè)連接都使用少量的共享內(nèi)存,所以共享內(nèi)存默認(rèn)值特別有限的系統(tǒng)甚至可能不允許這么多連接。因此,在創(chuàng)建數(shù)據(jù)庫(kù)集群時(shí),initdb會(huì)進(jìn)行一些調(diào)查,然后將支持的最大值(最多100)保存到默認(rèn)配置中。實(shí)際上,每個(gè)客戶端用于諸如排序之類的事情的非共享內(nèi)存量將使它相形見絀,但不能完全忽略共享組件。
重要的是不要將此參數(shù)設(shè)置為比您需要的值高得多的值。較大的設(shè)置有幾個(gè)缺點(diǎn)。第一個(gè)是浪費(fèi)的共享內(nèi)存,通常是最后一個(gè)要關(guān)注的事情,因?yàn)槊總€(gè)連接的數(shù)量很小。
二、記錄參數(shù)
常規(guī)日志記錄設(shè)置至關(guān)重要,因?yàn)槿罩居涗浽谡{(diào)試錯(cuò)誤、警告和其他系統(tǒng)問(wèn)題中起著至關(guān)重要的作用。我們可能需要設(shè)置log_destination、log_directory和log_filename等參數(shù),以符合我們環(huán)境的系統(tǒng)管理要求的方式保存我們的日志文件。在大多數(shù)系統(tǒng)上,這些都將設(shè)置為合理的默認(rèn)值以開始使用。在類UNIX系統(tǒng)上,一些數(shù)據(jù)庫(kù)日志記錄通常在啟動(dòng)和停止服務(wù)器的腳本中設(shè)置,而不是直接在postgresql.conf 文件中設(shè)置。
1、log_line_prefix
默認(rèn)的log_line_prefix參數(shù)是空的,一個(gè)好的起始值如下:
這會(huì)將以下內(nèi)容放入每個(gè)日志行:
%t:時(shí)間戳%u:數(shù)據(jù)庫(kù)用戶名%r:遠(yuǎn)程主機(jī)連接%d:數(shù)據(jù)庫(kù)%p:連接的進(jìn)程ID
2、日志語(yǔ)句
語(yǔ)句日志記錄是一種用于查找性能問(wèn)題的強(qiáng)大技術(shù)。分析log_statement保存的信息和語(yǔ)句級(jí)詳細(xì)信息的相關(guān)來(lái)源可以揭示許多類型的性能問(wèn)題的真正來(lái)源。此設(shè)置的選項(xiàng)如下:
none:不記錄任何語(yǔ)句級(jí)信息。
ddl:僅記錄數(shù)據(jù)定義語(yǔ)言(DDL)語(yǔ)句,例如CREATE和DROP。這通常可以保留,即使在生產(chǎn)中,也可以用于捕獲管理員無(wú)意或有意引入的重大更改。
mod:記錄任何修改值的語(yǔ)句,除了簡(jiǎn)單的SELECT語(yǔ)句外,它基本上是所有內(nèi)容。如果我們的工作負(fù)載主要是基于SELECT且數(shù)據(jù)更改相對(duì)較少,則始終啟用此功能可能很實(shí)用。
all:記錄每條語(yǔ)句。由于日志記錄的開銷,這在生產(chǎn)中通常是不切實(shí)際的。但是,如果我們的服務(wù)器相對(duì)于它的工作負(fù)載來(lái)說(shuō)足夠強(qiáng)大,那么讓它一直保持運(yùn)行可能是可行的。
log_min_duration_statement
一旦我們對(duì)執(zhí)行典型的查詢語(yǔ)句需要多長(zhǎng)時(shí)間有了一些了解,此設(shè)置允許您僅記錄超過(guò)我們?cè)O(shè)置的閾值的語(yǔ)句。該值以毫秒為單位,因此我們可以設(shè)置以下內(nèi)容:
log_min_duration_statement=1000
這樣,我們將只會(huì)看到運(yùn)行時(shí)間超過(guò)1秒的語(yǔ)句。這對(duì)于找出比大多數(shù)執(zhí)行時(shí)間長(zhǎng)得多的離群語(yǔ)句的來(lái)源非常方便。
三、內(nèi)存參數(shù)
數(shù)據(jù)庫(kù)組件需要內(nèi)存來(lái)緩存頻繁訪問(wèn)的數(shù)據(jù)、事務(wù)日志和排序數(shù)據(jù)。因此,正確調(diào)整內(nèi)存參數(shù)至關(guān)重要,因?yàn)樗梢詭椭鷥?yōu)化數(shù)據(jù)庫(kù)性能。
1、共享緩沖區(qū)
該參數(shù)的值定義了PostgreSQL共享緩沖池的大小。換句話說(shuō),此參數(shù)控制PostgreSQL用于緩存數(shù)據(jù)的內(nèi)存量。128 MB的默認(rèn)值對(duì)于任何現(xiàn)實(shí)世界的工作負(fù)載來(lái)說(shuō)都非常低,需要加強(qiáng)。此值應(yīng)根據(jù)數(shù)據(jù)集大小設(shè)置,數(shù)據(jù)庫(kù)服務(wù)器應(yīng)該在峰值負(fù)載和可用RAM的基礎(chǔ)上處理。事實(shí)上的經(jīng)驗(yàn)法則是,在RAM超過(guò)1GB的系統(tǒng)上,此參數(shù)的合理值約為系統(tǒng)內(nèi)存的四分之一。此參數(shù)的值也可以設(shè)置為更大的值,并且理想情況下有效的最大設(shè)置為可用RAM的40%。但是將它增加到超過(guò)該限制可能不會(huì)有效,因?yàn)镻ostgreSQL也依賴于操作系統(tǒng)緩存來(lái)進(jìn)行操作。較大的shared_buffers參數(shù)值意味著增加 checkpoint_segments 值,以便在一段時(shí)間內(nèi)分散寫入大量新數(shù)據(jù)或更改數(shù)據(jù)的過(guò)程。此值只能在服務(wù)器啟動(dòng)時(shí)設(shè)置。
2、臨時(shí)緩沖區(qū)
此參數(shù)定義每個(gè)數(shù)據(jù)庫(kù)會(huì)話用于緩存臨時(shí)表數(shù)據(jù)的內(nèi)存量。這些基本上是會(huì)話本地緩沖區(qū),僅用于訪問(wèn)臨時(shí)表。在Postgresql版本9.4中,此參數(shù)的默認(rèn)值為八,并且此設(shè)置可以在單個(gè)會(huì)話中更改,但只能在會(huì)話中首次使用臨時(shí)表之前更改。任何后續(xù)更改該值的嘗試都不會(huì)影響現(xiàn)有會(huì)話。
3、維護(hù)工作內(nèi)存
此參數(shù)定義維護(hù)操作使用的最大內(nèi)存量,即VACUUM、CREATE INDEX、ALTER TABLE ADD FOREIGN KEY 操作需要更多工作內(nèi)存。要注意的是,這些會(huì)話中的許多會(huì)話不太可能同時(shí)執(zhí)行這些操作,因此可以將此值設(shè)置為比標(biāo)準(zhǔn)每個(gè)客戶端work_mem設(shè)置大得多的值。在PostgreSQL 版本9.4中,此參數(shù)的默認(rèn)值設(shè)置為64MB。這里需要注意的一點(diǎn)是,當(dāng)autovacuum運(yùn)行時(shí),autovacuum_max_workers的值分配此內(nèi)存的次數(shù)。從優(yōu)化的角度并考慮到?jīng)]有增加autovacuum worker的數(shù)量,一個(gè)好的配置設(shè)置是將其設(shè)置為系統(tǒng)總內(nèi)存的5%左右,這樣即使五個(gè)這樣的進(jìn)程也不會(huì)超過(guò)可用內(nèi)存的四分之一記憶。這大約相當(dāng)于每GB服務(wù)器系統(tǒng)內(nèi)存50 MB的maintenance_work_mem。
以上是PostgreSQL服務(wù)器配置的參數(shù)指南介紹,希望能幫助到大家參考!
審核編輯:湯梓紅
-
服務(wù)器
+關(guān)注
關(guān)注
12文章
9308瀏覽量
86071 -
內(nèi)存
+關(guān)注
關(guān)注
8文章
3055瀏覽量
74334 -
數(shù)據(jù)庫(kù)
+關(guān)注
關(guān)注
7文章
3848瀏覽量
64687 -
postgresql
+關(guān)注
關(guān)注
0文章
22瀏覽量
237
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論