PostgresSQL資料庫配置參數中文說明

來源:互聯網
上載者:User

PostgresSQL提供了許多資料庫配置參數,本章將介紹每個參數的作用和如何配置每一個參數。

10.1 如何設定資料庫參數
所有的參數的名稱都是不區分大小寫。每個參數的取值是布爾型、整型、浮點型和字串型這四種類型中的一個,分別用boolean

、integer、 floating point和string表示。布爾型的值可以寫成ON、OFF、 TRUE、 FALSE、 YES、 NO、 1和 0,而且不區分大小

寫。

有些參數用來配置記憶體大小和時間值。記憶體大小的單位可以是KB、MB和GB。時間的單位可以是毫秒、秒、分鐘、小時和天。用ms表示

毫秒,用s表示秒,用 min表示分鐘,用h表示小時,用d表示天。表示記憶體大小和時間值的參數參數都有一個預設的單位,如果使用者

在設定參數的值時沒有指定單位,則以參數預設的 單位為準。例如,參數shared_buffers表示資料緩衝區的大小,它的預設單位是

資料區塊的個數,如果把它的值設成8,因為每個資料區塊的大小是  8KB,則資料緩衝區的大小是8*8=64KB,如果將它的值設成128MB,

則資料緩衝區的大小是128MB。參數vacuum_cost_delay 的預設單位是毫秒,如果把它的值設成10,則它的值是10毫秒,如果把它的

值設成100s,則它的值是100秒。

所有的參數都放在檔案 postgresql.conf中,下面是一個檔案執行個體:

#這是注釋
log_connections = yes
log_destination = 'syslog'
search_path = '"$user", public'

每一行只能指定一個參數,空格和空白行都會被忽略。“ #”表示注釋,注釋資訊不用單獨佔一行,可以出現在設定檔的任何地方

。如果參數的值不是簡單的標識符和數字,應該用單引號引起來。如果參數的值中有單引號,應該寫兩個單引號,或者在單引號前面

加一個反斜線。
一個設定檔也可以包含其它設定檔,使用include指令能夠達到這個目的,例如,假設postgresql.conf檔案中有下面一行:

include ‘my.confg’
檔案my.config中的配置資訊也會被資料庫讀入。include指令指定的設定檔也可以用include指令再包含其它設定檔。如果

include指令中指定的檔案名稱不是絕對路徑,資料庫會在postgresql.conf檔案所在的目錄下尋找這個檔案。

使用者也可以在資料庫啟動以後修改postgresql.conf設定檔,使用命令pg_ctl reload來通知數據庫重新讀取設定檔。注意,有些

參數在資料庫啟動以後,不能被修改,只有重新啟動資料庫以後,新的參數值才會生效。另外一些參數可 以在資料庫運行過程中被

修改而且新的值可以立即生效。所以資料庫在運行過程中重新讀取參數設定檔以後,不是所有的參數都會被賦給新的值。

使用者可以在自己建立的會話中執行命令SET修改某些配置參數的值(注意不是全部參數),例如:
SET ENABLE_SEQSCAN TO OFF;
另外,有些參數只有資料庫超級使用者才能使用SET命令修改它們。使用者可以在psql中執行命令show來查看所有的資料庫參數的當前值

。例如:
(1)show all;          --查看所有資料庫參數的值

(2)show search_path;  --查看參數search_path的值

10.2 串連與認證
10.2.1 串連設定
listen_addresses (string)

這個參數只有在啟動資料庫時,才能被設定。它指定資料庫用來監聽用戶端串連的TCP/IP地址。預設是值是* ,表示資料庫在啟動以

後將在運行資料的機器上的所有的IP地址上監聽使用者請求(如果機器只有一個網卡,只有一個IP地址,有多個網卡的機器有多個 IP

地址)。可以寫成機器的名字,也可以寫成IP地址,不同的值用逗號分開,例如,’server01’, ’140.87.171.49, 140.87.171.21

’。如果被設成localhost,表示資料庫只能接受本地的用戶端串連請求,不能接受遠端用戶端串連請求。
port (integer)

這個參數只有在啟動資料庫時,才能被設定。它指定資料庫監聽戶端串連的TCP連接埠。預設值是5432。

max_connections (integer)

這個參數只有在啟動資料庫時,才能被設定。它決定資料庫可以同時建立的最大的用戶端串連的數目。預設值是100。

superuser_reserved_connections (integer)

這個參數只有在啟動資料庫時,才能被設定。它表示預留給超級使用者的資料庫連接數目。它的值必須小於max_connections。 普通用

戶可以在資料庫中建立的最大的並發串連的數目是max_connections- superuser_reserved_connections, 預設值是3。

unix_socket_group (string)
這個參數只有在啟動資料庫時,才能被設定。設定Unix-domain socket所在的作業系統使用者組。預設值是空串,用啟動資料庫的操作

系統使用者所在的組作為Unix-domain socket的使用者組。

unix_socket_permissions (integer)
這個參數只有在啟動資料庫時,才能被設定。它設定Unix-domain socket的存取權限,格式與作業系統的檔案存取權限是一樣的。默

認值是0770,表示任何作業系統使用者都能訪問Unix-domain socket。可以設為0770(所有Unix-domain socket檔案的所有者所在的組

包含的使用者都能訪問)和0700(只有Unix-domain socket檔案的所有者才能訪問)。對於Unix-domain socket,只有寫入權限才有意義,

讀和執行許可權是沒有意義的。

tcp_keepalives_idle (integer)
這個參數可以在任何時候被設定。預設值是0,意思是使用作業系統的預設值。它設定TCP通訊端的TCP_KEEPIDLE屬性。這個參數對於

通過Unix-domain socket建立的資料庫連接沒有任何影響。

tcp_keepalives_interval (integer)
這個參數可以在任何時候被設定。預設值是0,意思是使用作業系統的預設值。它設定TCP通訊端的TCP_KEEPINTVL屬性。這個參數對

於通過Unix-domain socket建立的資料庫連接沒有任何影響。

tcp_keepalives_count (integer)
這個參數可以在任何時候被設定。預設值是0,意思是使用作業系統的預設值。它設定TCP通訊端的TCP_KEEPCNT屬性。這個參數對於

通過Unix-domain socket建立的資料庫連接沒有任何影響。

10.2.2. 安全與認證
authentication_timeout (integer)
這個參數只能在postgresql.conf檔案中被設定,它指定一個時間長度,在這個時間長度內,必須完成用戶端認證操作,否則用戶端

串連請求將被拒絕。它可以阻止某些用戶端進行認證時間長度時間佔用資料庫連接。單位是秒,預設值是60。

ssl (boolean)
這個參數只有在啟動資料庫時,才能被設定。決定資料庫是否接受SSL串連。預設值是off。

ssl_ciphers (string)
指定可以使用的SSL密碼編譯演算法。查看作業系統關於openssl的使用者手冊可以得到完整的密碼編譯演算法列表(執行命令openssl ciphers –v

也可以得到)。

10.3 資源消耗
10.3.1 記憶體
shared_buffers (integer)
這個參數只有在啟動資料庫時,才能被設定。它表示資料緩衝區中的資料區塊的個數,每個資料區塊的大小是8KB。資料緩衝區位於資料

庫的共用記憶體中,它越大越好,不能小於128KB。預設值是1024。

temp_buffers (integer)
這個參數可以在任何時候被設定。預設值是8MB。它決定存放暫存資料表的資料緩衝區中的資料區塊的個數,每個資料區塊的大小是8KB。臨時

表緩衝區存放在每個資料庫進程的私人記憶體中,而不是存放在資料庫的共用記憶體中。預設值是1024。

max_prepared_transactions (integer)
這個參數只有在啟動資料庫時,才能被設定。它決定能夠同時處於prepared狀態的事務的最大數目(參考PREPARE TRANSACTION命令

)。如果它的值被設為0。則將資料庫將關閉prepared事務的特性。它的值通常應該和max_connections的值 一樣大。預設值是5。

work_mem (integer)
這個參數可以在任何時候被設定。它決定資料庫的排序操作和雜湊表使用的記憶體緩衝區的大小。如何work_mem指定的記憶體被耗盡,數

據庫將使用磁碟檔案進 行完成操作,速度會慢很多。ORDER BY、DISTINCT和merge串連會使用排序操作。雜湊表在Hash串連、hash聚

集合函式和用雜湊表來處理IN謂詞中的子查詢中被使用。單位是 KB,預設值是1024。

maintenance_work_mem (integer)
這個參數可以在任何時候被設定。它決定資料庫的維護操作使用的記憶體空間的大小。資料庫的維護操作包括VACUUM、CREATE INDEX和

ALTER TABLE ADD FOREIGN KEY等操作。 maintenance_work_mem的值如果比較大,通常可以縮短VACUUM資料庫和從dump檔案中恢複數

據庫需要的時間。 maintenance_work_mem存放在每個資料庫進程的私人記憶體中,而不是存放在資料庫的共用記憶體中。單位是KB,默

認值是16384。

max_stack_depth (integer) 
這個參數可以在任何時候被設定,但只有資料庫超級使用者才能修改它。它決定一個資料庫進程在運行時的STACK所佔的空間的最大值

。資料庫進程在運行時,會 自動檢查自己的STACK大小是否超過max_stack_depth,如果超過,會自動終止當前事務。這個值應該比

作業系統設定的進程STACK的大小 的上限小1MB。使用作業系統命令“ulimit –s“可以得到作業系統設定的進程STACK的最大值。單

位是KB,預設值是100。

10.3.2 Free Space Map
資料庫的所有可用空間資訊都存放在一個叫free space map (FSM)的結構中,它記載資料檔案中每個資料區塊的可用空間的大小。FSM

中沒有記錄的資料區塊,即使有可用空間,也不會系統使用。系統如果需要新的物理存 儲空間,會首先在FSM中尋找,如果FSM中沒有

一個資料頁有足夠的可用空間,系統就會自動擴充資料檔案。所以,FSM如果太小,會導致系統頻繁地擴充數 據檔案,浪費實體儲存體

空間。命令VACUUM VERBOSE在執行結束以後,會提示當前的FSM設定是否滿足需要,如果FSM的參數值太小,它會提示增大參數。

FSM存放在資料庫的共用記憶體中,由於實體記憶體的限制,FSM不可能追蹤資料庫的所有的資料檔案的所有資料區塊的可用空間資訊,只能

跟蹤一部分資料區塊的可用空間資訊。

max_fsm_relations (integer)
這個參數只有在啟動資料庫時,才能被設定。預設值是1000。它決定FSM跟蹤的表和索引的個數的上限。每個表和索引在FSM中佔7個

位元組的儲存空間。

max_fsm_pages (integer)
這個參數只有在啟動資料庫時,才能被設定。它決定FSM中跟蹤的資料區塊的個數的上限。initdb在建立資料庫叢集時會根據實體記憶體

的大小決定它的值。每 個資料區塊在fsm中佔6個位元組的儲存空間。它的大小不能小於16 * max_fsm_relations。預設值是20000。

10.3.3 核心資源
max_files_per_process (integer)
這個參數只有在啟動資料庫時,才能被設定。他設定每個資料庫進程能夠開啟的檔案的數目。預設值是1000。

shared_preload_libraries (string)
這個參數只有在啟動資料庫時,才能被設定。它設定資料庫在啟動時要載入的作業系統共用庫檔案。如果有多個庫檔案,名字用逗號

分開。如果資料庫在啟動時未找到shared_preload_libraries指定的某個庫檔案,資料庫將無法啟動。預設值為空白串。

10.3.4 垃圾收集
執行VACUUM 和ANALYZE命令時,因為它們會消耗大量的CPU與IO資源,而且執行一次要花很長時間,這樣會干擾系統執行應用程式發

出的SQL命令。為瞭解決這個 問題,VACUUM 和ANALYZE命令執行一段時間後,系統會暫時終止它們的運行,過一段時間後再繼續執行

這兩個命令。這個特性在預設的情況下是關閉的。將參數 vacuum_cost_delay設為一個非零的正整數就可以開啟這個特性。

使用者通常只需要設定參數vacuum_cost_delay和vacuum_cost_limit,其它的參數使用預設值即可。VACUUM 和ANALYZE命令在執行過程

中,系統會計算它們執行消耗的資源,資源的數量用一個正整數表示,如果資源的數量超過 vacuum_cost_limit,則執行命令的進程

會進入睡眠狀態,睡眠的時間長度是是vacuum_cost_delay。 vacuum_cost_limit的值越大,VACUUM 和ANALYZE命令在執行的過程中

,睡眠的次數就越少,反之,vacuum_cost_limit的值越小,VACUUM 和ANALYZE命令在執行的過程中,睡眠的次數就越多。

vacuum_cost_delay (integer)
這個參數可以在任何時候被設定。預設值是0。它決定執行VACUUM 和ANALYZE命令的進程的睡眠時間。單位是微秒。它的值最好是10

的整數,如果不是10的整數,系統會自動將它設為比該值大的並且最接近該值的是10 的倍數的整數。如果值是0,VACUUM 和ANALYZE

命令在執行過程中不會主動進入睡眠狀態,會一直執行下去直到結束。

vacuum_cost_page_hit (integer)
這個參數可以在任何時候被設定。預設值是1。

vacuum_cost_page_miss (integer)
這個參數可以在任何時候被設定。預設值是10。

vacuum_cost_page_dirty (integer)
這個參數可以在任何時候被設定。預設值是20。

vacuum_cost_limit (integer)
這個參數可以在任何時候被設定。預設值是200。

10.3.5 後台寫資料庫進程
後台寫資料庫進程負責將資料緩衝區中的被修改的資料區塊(又叫髒資料區塊)寫回到資料庫物理檔案中。

bgwriter_delay (integer)
這個參數只能在檔案postgresql.conf中設定。它決定後台寫資料庫進程的睡眠時間。後台寫資料庫進程每次完成寫資料到物理檔案

中的任務以後, 就會睡眠bgwriter_delay指定的時間。 bgwriter_delay的值應該是10的倍數,如果使用者設定的值不是10的倍數,數

據庫會自動將參數的值設為比使用者指定的值大的最接近使用者指定的值 的同時是10的倍數的值。單位是毫秒,預設值是200。

bgwriter_lru_maxpages (integer)
這個參數只能在檔案postgresql.conf中設定。預設值是100。後台寫資料庫進程每次寫髒資料區塊時,寫到外部檔案中的髒資料區塊的個

數不能超過 bgwriter_lru_maxpages指定的值。例如,如果它的值是500,則後台寫資料庫進程每次寫到物理檔案的資料頁的個數不

能超過500,若 超過,進程將進入睡眠狀態,等下次醒來再執行寫物理檔案的任務。如果它的值被設為0, 後台寫資料庫進程將不會

寫任何物理檔案(但還會執行檢查點操作)。

bgwriter_lru_multiplier (floating point)
這個參數只能在檔案postgresql.conf中設定。預設值是2.0。它決定後台寫資料庫進程每次寫物理檔案時,寫到外部檔案中的髒資料

塊的個數 (不能超過bgwriter_lru_maxpages指定的值)。一般使用預設值即可,不需要修改這個參數。這個參數的值越大,後台寫

資料庫進程每次寫 的髒資料區塊的個數就越多。

10.4 交易記錄
full_page_writes (boolean)
這個參數只能在postgresql.conf檔案中被設定。預設值是on。開啟這個參數,可以提高資料庫的可靠性,減少資料丟失的機率,但

是會產生過多的交易記錄,降低資料庫的效能。

wal_buffers (integer)
這個參數只有在啟動資料庫時,才能被設定。預設值是8。它指定交易記錄緩衝區中包含的資料區塊的個數,每個資料區塊的大小是8KB,

所以預設的交易記錄緩衝區的大小是8*8=64KB。交易記錄緩衝區位於資料庫的共用記憶體中。

wal_writer_delay (integer)
這個參數只能在postgresql.conf檔案中被設定。它決定寫交易記錄進程的睡眠時間。WAL進程每次在完成寫交易記錄的任務後,就會

睡眠 wal_writer_delay指定的時間,然後醒來,繼續將新產生的交易記錄從緩衝區寫到WAL檔案中。單位是毫秒(millisecond),

預設 值是200。

commit_delay (integer)
這個參數可以在任何時候被設定。它設定事務在發出提交命令以後的睡眠時間,只有在睡眠了commit_delay指定的時間以後,事務產

生的交易記錄才會 被寫到交易記錄檔中,事務才能真正地提交。增大這個參數會增加使用者的等待時間,但是可以讓多個事務被同

時提交,提高系統的效能。如果資料庫中的負載比較 高,而且大部分事務都是更新類型的事務,可以考慮增大這個參數的值。下面

的參數commit_siblings會影響commit_delay是否生效。 預設值是0,單位是微秒(microsecond)。

commit_siblings (integer)
這個參數可以在任何時候被設定。這個參數的值決定參數commit_delay是否生效。假設commit_siblings的值是5,如果一個事務發出

一個提交請求,此時,如果資料庫中正在執行的事務的個數大於或等於5,那麼該事務將睡眠commit_delay指定的時間。如果資料庫

中正在執行的事務 的個數小於5,這個事務將直接提交。預設值是5。

10.5 檢查點
checkpoint_segments (integer)
這個參數只能在postgresql.conf檔案中被設定。預設值是3。它影響系統何時啟動一個檢查點操作。如果上次檢查點操作結束以後,

系統產生的事 務記錄檔的個數超過checkpoint_segments的值,系統就會自動啟動一個檢查點操作。增大這個參數會增加資料庫崩

潰以後恢複操作需要的時 間。

checkpoint_timeout (integer)
這個參數只能在postgresql.conf檔案中被設定。單位是秒,預設值是300。它影響系統何時啟動一個檢查點操作。如果現在的時間減

去上次檢查 點操作結束的時間超過了checkpoint_timeout的值,系統就會自動啟動一個檢查點操作。增大這個參數會增加資料庫崩

潰以後恢複操作需要的時 間。

checkpoint_completion_target (floating point)
這個參數控制檢查點操作的執行時間。合法的取值在0到1之間,預設值是0.5。不要輕易地改變這個參數的值,使用預設值即可。 這

個參數只能在postgresql.conf檔案中被設定。

10.6 歸檔模式
archive_mode (boolean)
這個參數只有在啟動資料庫時,才能被設定。預設值是off。它決定資料庫是否開啟歸檔模式。

archive_dir (string)
這個參數只有在啟動資料庫時,才能被設定。預設值是空串。它設定存放歸檔交易記錄檔的目錄。

archive_timeout (integer)
這個參數只能在postgresql.conf檔案中被設定。預設值是0。單位是秒。如果archive_timeout的值不是0,而且目前時間減去數 據

庫上次進行交易記錄檔切換的時間大於archive_timeout的值,資料庫將進行一次交易記錄檔切換。一般情況下,資料庫只有在

一個交易記錄 檔案寫滿以後,才會切換到下一個交易記錄檔,設定這個參數可以讓資料庫在一個交易記錄檔尚未寫滿的情況下

切換到下一個交易記錄檔。

10.7 最佳化器參數
10.7.1 存取方法參數
下列參數控制查詢最佳化工具是否使用特定的存取方法。除非對最佳化器特別瞭解,一般情況下,使用它們預設值即可。

enable_bitmapscan (boolean)
開啟或者關閉bitmap-scan 。預設值是 on。

enable_hashagg (boolean)
開啟或者關閉hashed aggregation。預設值是 on。

enable_hashjoin (boolean)
開啟或者關閉hash-join。預設值是 on。

enable_indexscan (boolean)
開啟或者關閉index-scan。預設值是 on。

enable_mergejoin (boolean)
開啟或者關閉merge-join。預設值是 on。

enable_nestloop (boolean)
開啟或者關閉nested-loop join。預設值是 on。不可能完全不使用nested-loop join,關閉這個參數會讓系統在有其它存取方法可

用的情況下,不使用nested-loop join。

enable_seqscan (boolean)
開啟或者關閉sequential scan。預設值是 on。不可能完全不使用sequential scan,關閉這個參數會讓系統在有其它存取方法可用

的情況下,不使用sequential scan。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.