1. 程式人生 > >PostgreSQL資料庫配置檔案之postgresql.conf全部引數詳解

PostgreSQL資料庫配置檔案之postgresql.conf全部引數詳解

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的值

2 引數詳細說明

2.1. 連線與認證

2.1.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建立的資料庫連線沒有任何影響。


2.1.2 安全與認證

authentication_timeout (integer)

這個引數只能在postgresql.conf檔案中被設定,它指定一個時間長度,在這個時間長度內,必須完成客戶端認證操作,否則客戶端連線請求將被拒絕。它可以阻止某些客戶端進行認證時長時間佔用資料庫連線。單位是秒,預設值是60。

ssl (boolean)

這個引數只有在啟動資料庫時,才能被設定。決定資料庫是否接受SSL連線。預設值是off。

ssl_ciphers (string)

指定可以使用的SSL加密演算法。檢視作業系統關於openssl的使用者手冊可以得到完整的加密演算法列表(執行命令openssl ciphers –v也可以得到)。

2.2 資源消耗

2.2.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。

2.2.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。

2.2.3 核心資源

max_files_per_process (integer)

這個引數只有在啟動資料庫時,才能被設定。他設定每個資料庫程序能夠開啟的檔案的數目。預設值是1000。

shared_preload_libraries (string)

這個引數只有在啟動資料庫時,才能被設定。它設定資料庫在啟動時要載入的作業系統共享庫檔案。如果有多個庫檔案,名字用逗號分開。如果資料庫在啟動時未找到shared_preload_libraries指定的某個庫檔案,資料庫將無法啟動。預設值為空串。

2.2.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。

2.2.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指定的值)。一般使用預設值即可,不需要修改這個引數。這個引數的值越大,後臺寫資料庫程序每次寫的髒資料塊的個數就越多。

2.3 事務日誌

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。

2.4 檢查點

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檔案中被設定。

2.5 歸檔模式

archive_mode (boolean)

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

archive_dir (string)

這個引數只有在啟動資料庫時,才能被設定。預設值是空串。它設定存放歸檔事務日誌檔案的目錄。

archive_timeout (integer)

這個引數只能在postgresql.conf檔案中被設定。預設值是0。單位是秒。如果archive_timeout的值不是0,而且當前時間減去資料庫上次進行事務日誌檔案切換的時間大於archive_timeout的值,資料庫將進行一次事務日誌檔案切換。一般情況下,資料庫只有在一個事務日誌檔案寫滿以後,才會切換到下一個事務日誌檔案,設定這個引數可以讓資料庫在一個事務日誌檔案尚未寫滿的情況下切換到下一個事務日誌檔案。

2.6 優化器引數

2.6.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。

enable_sort (boolean)

開啟或者關閉explicit sort。預設值是 on。不可能完全不使用explicit sort,關閉這個引數會讓系統在有其它存取方法可用的情況下,不使用explicit sort。

enable_tidscan (boolean)

開啟或者關閉TID scan。預設值是 on。

2.6.2 優化器成本常量

優化器用一個正的浮點數來表示不同的查詢計劃的執行成本,每個基本的資料庫操作都會被賦給一個確定的成本常量,優化器根據每個基本操作的執行成本來計算每個查詢計劃的執行成本。不要輕易地改變下面的引數的值,使用它們的預設值即可。

seq_page_cost (floating point)

設定從資料檔案上順序讀取一個數據塊的執行成本。預設值是1.0。

random_page_cost (floating point)

設定從資料檔案上隨機讀取一個數據塊的執行成本。預設值是4.0。

cpu_tuple_cost (floating point)

設定處理每一個數據行的執行成本。預設值是0.01。

cpu_index_tuple_cost (floating point)

設定在掃描索引的過程中處理每一個索引項的執行成本。預設值是0.005。

cpu_operator_cost (floating point)

設定處理每一個運算子或函式的執行成本。預設值是0.0025。

effective_cache_size (integer)

設定單個查詢可以使用的資料緩衝區的大小。預設值是128MB。

2.6.3 Genetic Query Optimizer

下列引數控制優化器使用的遺傳演算法。除非對遺傳演算法特別瞭解,一般情況下,使用它們預設值即可。

geqo (boolean)

開啟或者關閉遺傳優化器。預設值是on。

geqo_threshold (integer)

確定使用遺傳優化器的查詢型別。預設值是12。如果FROM子句中引用的的表的數目超過geqo_threshold的值,就會使用遺傳優化器。對於簡單的查詢使用窮舉優化器。

geqo_effort (integer)

控制遺傳優化器在生成查詢計劃需要的時間和查詢計劃的有效性之間做一個折中。有效的取值範圍是1到 10。預設值是5。值越大,優化器花在選擇查詢計劃的上的時間越長,同時找到一個最優的查詢計劃的可能性就越大。系統通常不直接使用geqo_effort的值,而是使用它的值來計算引數geqo_pool_size和geqo_generations的預設。

geqo_pool_size (integer)

控制遺傳優化器的池(pool)大小。預設值是0。池大小是遺傳群體中的個體數目。至少是2,典型的取值在10和1000之間。如果引數的值是0,系統會自動根據geqo_effort的值和查詢中引用的表的個數選擇一個預設值。

geqo_generations (integer)

控制遺傳優化器的代(generation)的大小。預設值是0。代是遺傳演算法的迭代次數。至少是1,典型的取值範圍與池的取值範圍相同。如果引數的值是0,系統會自動根據geqo_pool_size的值和選擇一個預設值。

geqo_selection_bias (floating point)

控制遺傳優化器的代選擇偏差(selection bias)的大小。預設值是2。取值範圍在1.50到2.00之間。

2.6.4 其它優化器引數

default_statistics_target (integer)

設定預設的收集優化器統計資料的目標值。它的值越大,ANALYZE操作的執行的時間越長,掃描的資料行的個數也就越多,得到的優化器統計資料就越準確。也可以使用命令ALTER TABLE ... ALTER COLUMN ... SET STATISTICS來為表的每個列設定一個單獨的統計資料目標值,這個值的作用與引數default_statistics_target是一樣,它隻影響相關的列的統計資料收集過程。預設值是10。

constraint_exclusion (boolean)

如果該引數的值是on,查詢優化器將使用表上的約束條件來優化查詢。如果它的值是off,查詢優化器不會使用表上的約束條件來優化查詢。預設值是off。

2.7 資料庫執行日誌配置引數

log_directory (string)

這個引數只能在postgresql.conf檔案中被設定。它決定存放資料庫執行日誌檔案的目錄。預設值是pg_log。可以是絕對路徑,也可是相對路徑(相對於資料庫檔案所在的路徑)。

log_filename (string)

它決定資料庫執行日誌檔案的名稱。預設值是postgresql-%Y-%m-%d_%H%M%S.log。它的值可以包含%Y、%m、%d、%H、%M和%S這樣的字串,分別表示年、月、日、小時、分和秒。 如果引數的值中沒有指定時間資訊(沒有出現%Y、%m、%d、%H、%M和%S中的任何一個),系統會自動在log_filename值的末尾加上檔案建立的時間作為檔名,例如,如果log_filename的值是 server_log,那麼在Sun Aug 29 19:02:33 2004 MST被建立的日誌檔案的名稱將是server_log.1093827753,1093827753是Sun Aug 29 19:02:33 2004 MST在資料庫內部的表示形式。這個引數只能在postgresql.conf檔案中被設定。

log_rotation_age (integer)

它決定何時建立一個新的資料庫日誌檔案。單位是分鐘。預設值是0。如果現在的時間減去上次建立一個數據庫執行日誌的時間超過了log_rotation_age的值,資料庫將自動建立一個新的執行日誌檔案。如果它的值是0,該引數將不起任何作用。這個引數只能在postgresql.conf檔案中被設定。

log_rotation_size (integer)

這個引數只能在postgresql.conf檔案中被設定。它決定何時建立一個新的資料庫日誌檔案。單位是KB。預設值是10240。如果一個日誌檔案寫入的資料量超過log_rotation_size的值,資料庫將建立一個新的日誌檔案。如果它的值被設為0,該引數將不起任何作用。

log_truncate_on_rotation (boolean)

系統在建立一個新的資料庫執行日誌檔案時,如果發現存在一個同名的檔案,當log_truncate_on_rotation的值是on時,系統覆蓋這個同名檔案。當log_truncate_on_rotation的值是off時,系統將重用這個同名檔案,在它的末尾新增新的日誌資訊。另外要注意的是,只有在因為引數log_rotation_age起作用系統才建立新的日誌檔案的情況下,才會覆蓋同名的日誌檔案。因為資料庫重新啟動或者因為引數log_rotation_size起作用而建立新的日誌檔案,不會覆蓋同名的日誌檔案,而是在同名的日誌檔案末尾新增新的日誌資訊。這個引數只能在postgresql.conf檔案中被設定。預設值是off。
例如,將這個引數設為on,將log_rotation_age設為60,將同時將log_filename設為postgresql-%H.log,系統中一共將只有24個日誌檔案,它們會被不斷地重用,任何時刻,系統中最多隻有最近24小時的日誌資訊。

client_min_messages (string)

控制傳送給客戶端的訊息級別。合法的取值是DEBUG5、DEBUG4、DEBUG3、DEBUG2、DEBUG1、LOG、NOTICE、WARNING、ERROR、FATAL和PANIC,每個級別都包含排在它後面的所有級別中的資訊。級別越低,傳送給客戶端的訊息就越少。 預設值是NOTICE。這個引數可以在任何時候被設定。

log_min_messages (string)

控制寫到資料庫日誌檔案中的訊息的級別。合法的取值是DEBUG5、DEBUG4、DEBUG3、DEBUG2、DEBUG1、INFO、NOTICE、WARNING、ERROR、 LOG、FATAL和PANIC,每個級別都包含排在它後面的所有級別中的資訊。級別越低,資料庫執行日誌中記錄的訊息就越少。預設值是NOTICE。只有超級使用者才能修改這個引數。只有超級使用者才能設定這個引數。

log_error_verbosity (string)

控制每條日誌資訊的詳細程度。合法的取值是TERSE、DEFAULT和VERBOSE(每個取值都比它前面的取值提供更詳細的資訊)。只有超級使用者才能修改這個引數。預設值是DEFAULT。

log_min_error_statement (string)

控制日誌中是否記錄導致資料庫出現錯誤的SQL語句。合法的取值是DEBUG5、DEBUG4、DEBUG3、DEBUG2、DEBUG1、INFO、NOTICE、WARNING、ERROR、 LOG、FATAL和PANIC,每個級別都包含排在它後面的所有級別。預設值是ERROR。只有超級使用者才能修改這個引數。

表1:訊息嚴重級別

嚴重級別

用法

DEBUG1..DEBUG5

報告詳細的除錯資訊。

INFO

報告使用者可能需要的資訊。

NOTICE

報告對使用者有用的資訊。

WARNING

報告警告資訊。

ERROR

報告錯誤資訊。

LOG

報告對資料庫管理員有用的資訊, 例如,檢查點操作統計資訊。

FATAL

報告導致當前會話被終止的錯誤資訊。

PANIC

報告導致整個資料庫被關閉的錯誤資訊。

debug_print_parse (boolean)

debug_print_rewritten (boolean)

debug_print_plan (boolean)

debug_pretty_print (boolean)

這些引數控制資料庫是否輸出執行時的除錯資訊。這些引數的預設值是off。這些引數可以被任何使用者設定。

log_checkpoints (boolean)

控制是否及記錄檢查點操作資訊。預設值是off。這個引數只能在postgresql.conf檔案中被設定。必須重啟資料庫才能生效。

log_connections (boolean)

控制是否及記錄客戶端連線請求資訊。預設值是off。這個引數只能在postgresql.conf檔案中被設定。必須重啟資料庫才能生效。

log_disconnections (boolean)

控制是否記錄客戶端結束連線資訊。預設值是off。這個引數只能在postgresql.conf檔案中被設定。

log_duration (boolean)

控制是否記錄每個完成的SQL語句的執行時間。只有超級使用者才能修改這個引數。預設值是off。對於使用擴充套件協議與資料庫通訊的客戶端,會記載Parse、Bind和Execute的執行時間。

log_hostname (boolean)

控制是否及記錄客戶端的主機名。預設值是off。如果設為on,可能會影響資料庫的效能,因為解析主機名可能需要一定的時間。這個引數只能在postgresql.conf檔案中被設定。這個引數只能在postgresql.conf檔案中被設定。

log_line_prefix (string)

控制每條日誌資訊的字首格式。預設值是空串。它的格式類似c語言中printf函式的format字串。這個引數只能在postgresql.conf檔案中被設定。

表2:轉義序列含義

轉義序列

含義

%u

使用者名稱

%d

資料庫名

%r

客戶端機器名或IP地址,還有客戶端埠

%h

客戶端機器名或IP地址

%p

程序ID

%t

帶微秒的時間

%m

不帶微秒的時間

%i

命令標籤: 會話當前執行的命令型別

%c

會話ID

%l

每個會話的日誌編號,從1開始

%s

程序啟動時間

%v

虛擬事務ID (backendID/localXID)

%x

事務ID (0表示沒有分配事務ID)

%q

不產生任何輸出。如果當前程序是backend程序,忽略這個轉義序列,繼續處理後面的轉義序列。如果當前程序不是backend程序,忽略這個轉義序列和它後面的所有轉義序列。

%%

字元%



log_lock_waits (boolean)

如果一個會話等待某個型別的鎖的時間超過deadlock_timeout的值,該引數決定是否在資料庫日誌中記錄這個資訊。預設值是off。只有超級使用者才能修改這個引數。

log_statement (string)

控制記錄哪種SQL語句的執行資訊。有效的取值是none、ddl、mod和all。預設值是none。ddl包括所有資料定義語句,如CREATE、ALTER和DROP語句。mod包括所有ddl語句和更新資料的語句,例如INSERT、UPDATE、DELETE、TRUNCATE、 COPY FROM、PREPARE和 EXECUTE。All包括所有的語句。只有超級使用者才能修改這個引數。

log_temp_files (integer)

控制是否記錄臨時檔案的刪除資訊。單位是KB。0表示記錄所有臨時檔案的刪除資訊。正整數表示只記錄大小比log_temp_files的值大的臨時檔案的刪除資訊。-1表示不記錄任何臨時檔案刪除資訊。預設值是-1。這個引數可以在任何時候被設定。

log_timezone (string)
設定資料庫日誌檔案在寫日誌檔案時使用的時區。預設值是unknown,意識是使用作業系統的時區。這個引數只能在postgresql.conf檔案中被設定。

2.8 資料庫執行統計資料相關引數

下面的引數控制是否蒐集特定的資料庫執行統計資料:

track_activities (boolean)

是否收集每個會話的當前正在執行的命令的統計資料,包括命令開始執行的時間。預設值是on。只有超級使用者才能修改這個引數。

track_counts (boolean)

是否收集資料庫活動的統計資料。預設值是on。只有超級使用者才能修改這個引數。

log_statement_stats (boolean)

log_parser_stats (boolean)

log_planner_stats (boolean)

log_executor_stats (boolean)

這些引數決定是否在資料庫的執行日誌裡記載每個SQL語句執行的統計資料。如果log_statement_stats的值是on,其它的三個引數的值必須是off。所有的這些引數的預設值都是off。log_statement_stats報告整個語句的統計資料,log_parser_stats記載資料庫解析器的統計資料,log_planner_stats報告資料庫查詢優化器的統計資料,log_executor_stats報告資料庫執行器的統計資料。只有超級使用者才能修改這些引數。

2.9 自動垃圾收集相關引數

下面的引數控制自動垃圾收集的行為:

autovacuum (boolean)

控制是夠開啟資料庫的自動垃圾收集功能。預設值是on。如果autovacuum被設為on,引數track_counts(參考本章10.9)也要被設為on,自動垃圾收集才能正常工作。注意,即使這個引數被設為off,如果事務ID迴繞即將發生,資料庫會自動啟動一個垃圾收集操作。這個引數只能在檔案postgresql.conf中被設定。

log_autovacuum_min_duration (integer)

單位是毫秒。如果它的值為0,所有的垃圾蒐集操作都會被記錄在資料庫執行日誌中,如果它的值是-1,所有的垃圾收集操作都不會被記錄在資料庫執行日誌中。如果把它的值設為250毫秒,只要自動垃圾蒐集發出的VACUUM和ANALYZE命令的執行時間超過250毫秒,VACUUM和ANALYZE命令的相關資訊就會被記錄在資料庫執行日誌中。預設值是-1。這個引數只能在 postgresql.conf中被設定。

autovacuum_max_workers (integer)

設定能同時執行的最大的自動垃圾收集工作程序的數目。預設值是3。這個引數只能在檔案postgresql.conf中被設定。

autovacuum_naptime (integer)

設定自動垃圾收集控制程序的睡眠時間。單位是秒,預設值是60。這個引數只能在檔案postgresql.conf中被設定。

autovacuum_vacuum_threshold (integer)

設定觸發垃圾收集操作的閾值。預設值是50。這個引數只能在檔案postgresql.conf中被設定。只有一個表上被刪除或更新的記錄的數目超過了autovacuum_vacuum_threshold的值,才會對這個表執行垃圾收集操作。

autovacuum_analyze_threshold (integer)

設定觸發ANALYZE操作的閾值。預設值是50。這個引數只能在檔案postgresql.conf中被設定。只有一個表上被刪除、插入或更新的記錄的數目超過了autovacuum_analyze_threshold的值,才會對這個表執行ANALYZE操作。

autovacuum_vacuum_scale_factor (floating point)

這個引數與何時對一個表進行垃圾收集操作相關。預設值是0.2。這個引數只能在檔案postgresql.conf中被設定。

autovacuum_analyze_scale_factor (floating point)

這個引數與何時對一個表進行ANALYZE操作相關。預設值是0.1。這個引數只能在檔案postgresql.conf中被設定。

2.10 鎖管理引數

deadlock_timeout(integer)


設定死鎖超時檢測時間。單位是微秒,預設值是1000。死鎖檢測是一個消耗許多 CPU資源的操作。這個引數的值不能太小。在資料庫負載比較大的情況下,應當增大這個引數的值。

max_locks_per_transaction(integer)

這個引數控制每個事務能夠得到的平均的物件鎖的個數。預設值是64。資料庫在啟動以後建立的共享鎖表的最大可以儲存max_locks_per_transaction * (max_connections + max_prepared_transactions)個物件鎖。單個事務可以同時獲得的物件鎖的數目可以超過max_locks_per_transaction的值,只要共享鎖表中還有剩餘空間。

2.11 系統預設引數

這些引數系統啟動後會自動設定,使用者只能查詢它們的值,不能用任何方式修改這些引數。

block_size (integer)

報告資料庫檔案資料塊的大小。

integer_datetimes (boolean)

如果值為on,表示系統內部用64位整數儲存時間/日期型別的資料。如果值是off,表示系統內部不是用64位整數儲存時間/日期型別的資料。

lc_collate (string)

報告字元排序設定。

lc_ctype (string)

報告字元分類設定。

max_function_args (integer)

報告函式引數的最大個數。

max_identifier_length (integer)

報告識別符號的最大長度。

max_index_keys (integer)

報告索引的關鍵字中列的最大數目。

server_encoding (string)

報告伺服器的字元編碼名稱。

server_version (string)

報告伺服器的版本號。

server_version_num (integer)

報告伺服器的小版本號。

data_directory (string)

資料檔案所在的目錄。

config_file (string)

資料庫引數配置檔名。

hba_file (string)

資料庫hba檔名。

external_pid_file (string)

資料庫PID檔名。

2.12 其它引數

default_with_oids (boolean)

該引數控制CREATE TABLE 和CREATE TABLE AS命令是否給新建的表新增一個系統列OID。如果它的值是on,CREATE TABLE 和CREATE TABLE AS命令在沒有指定WITH OIDS 和WITHOUT OIDS子句的情況下,新建的表將包含系統列OID,同時SELECT INTO命令也會將系統列OID新增到新建的表中去。預設值是off。

search_path (string)

設定模式搜尋路徑。它的值由一個或多個模式名構成,不同的模式名用逗號隔開。預設值是'"$user", public',$user表示與當前會話使用者名稱同名的模式名,如果這樣的模式不存在,$user將被忽略。
系統表所在的模式pg_catalog,如果出現在search_path中,它會按指定的順序被搜尋。如果它沒有出現在search_path中,則總是排在search_path中指定的所有模式前面被搜尋。
當前會話如果存在存放臨時表的模式,可以使用別名pg_tmp將它列在搜尋路徑中,例如,'"$user", public, pg_tmp'。如果存放臨時表的模式沒有出現在搜尋路徑中,則它會作為第一個搜尋物件,排在pg_catalog和search_path中所有模式的前面。注意,系統只會在存放臨時表的模式中搜索表、檢視、序列物件和資料型別這樣的資料庫物件,不會在裡面搜尋函式或運算子這樣的資料庫物件。

default_tablespace (string)

設定預設表空間。預設值是空串。

temp_tablespaces (string)

設定預設的存放臨時物件的表空間。預設值是空串。它的值由一個或多個表空間組成,不同的值用逗號隔開。

check_function_bodies (boolean)

設定是否驗證CREATE FUNCTION.命令中指定的函式體。預設值是on。關閉這個選項可以在從dump檔案中恢復函式定義資訊時避免系統報錯,因為一個正在恢復的函式可能會引用尚未恢復的函式。

default_transaction_isolation (string)

預設的事務隔離級別。合法的取值是"read uncommitted"、"read committed"、"repeatable read”和"serializable"。 預設值是read committed。

default_transaction_read_only (boolean)

設定每個新建立的事務是否是隻讀的。預設值是off。只讀事務只能修改臨時表。詳細資訊參考SQL命令SET TRANSACTION。

session_replication_role (string)

控制與複製有關的觸發器和規則的行為。可能的取值是origin、replica和local,預設值是origin。

statement_timeout(integer)

設定語句執行的超時值。如果一個語句執行的時間超過statement_timeout指定的值,該語句就會被強行終止。如果它的值為0,則關閉超時特性。單位是毫秒,預設值是0。最好不要在檔案postgresql.conf中設定這個引數,因為它影響所有的會話。

xmlbinary (string)

設定XML文件中二進位制資料的編碼型別。它的值可以是base64和hex。預設值是base64。、

xmloption (string)

設定在字串和XML資料之間進行型別轉換時使用的XML文件型別。它的值是DOCUMENT 或者CONTENT,預設值是CONTENT。

DateStyle (string)

設定時間和日期值的顯示格式。initdb會將這個引數初始化成與lc_time一致的值。

timezone (string)

設定顯示和解釋時間型別數值時使用的時區。

timezone_abbreviations (string)

設定資料庫接受的時區縮寫值。預設值是Default,代表一些通用的時區縮寫。

extra_float_digits(integer)
控制浮點數顯示時的有效的數值位的最大個數。float4型別的數的顯示精度是6+ extra_float_digits, float8型別的數的顯示精度是15+ extra_float_digits。有效的取值範圍是-15到2。預設值是0。

client_encoding (string)

設定客戶端的字元編碼型別。預設值是資料庫的字元編碼型別。

lc_monetary (string)

設定貨幣值的顯示格式。它影響to_char之類的函式的輸出。

lc_numeric (string)

設定數值的顯示格式。它影響to_char之類的函式的輸出。

default_text_search_config (string)

設定全文檢索的配置資訊,預設值是pg_catalog.simple。

explain_pretty_print (boolean)

設定EXPLAIN VERBOSE命令的是否開啟idented輸出格式。預設值是on。

dynamic_library_path (string)

設定資料查詢動態載入的共享庫檔案的路徑。如果CREATE FUNCTION或LOAD命令沒有指定庫檔案所在的路徑,系統將在dynamic_library_path指定的目錄中查詢指定的庫檔案。它的值由一個或多個作業系統目錄路徑組成,不同的路徑用冒號隔開。例如,dynamic_library_path = '/usr/local/lib/postgresql:/home/my_project/lib:$libdir',其中的:$libdir表示PostgreSQL自己內建的共享庫的路徑,使用命令pg_config –pkglibdir可以找到這個路徑。預設值是'$libdir'。如果它的值是空串,自動路徑搜尋將被關閉。超級使用者可以在任何時候修改這個引數,推薦在檔案postgresql.conf中配置這個引數。

gin_fuzzy_search_limit (integer)

設定GIN索引返回的集合的大小的上限。

backslash_quote

有三種取值,分別是on、off和safe_encoding。on表示可以在字串中用\'表示但引號。off表示\只是一個普通字元,單個單引號必須用兩個連續的單引號表示。safe_encoding與on的功能基本相同,但它比on更安全,推薦使用safe_encoding。預設值是safe_encoding。這個引數可以在任何時候被設定。

regex_flavor(string)

設定系統接受的正則表示式的型別。取值可以是advanced、extended和basic。預設值是advanced。這個引數可以在任何時候被設定。

standard_conforming_strings (boolean)

如果是on,系統會將sql命令中的字串中的字元“\”作為普通的字元看待,而不是作為轉義字元看待。如果是off,系統會將sql命令中的字元“\”作為轉義字元看待。預設值是off。這個引數可以在任何時候被設定。

synchronize_seqscans (boolean)

如果這個引數的值是是on,多個查詢如果同時順序掃描一個表中的同一個資料頁,系統只會發出一個IO操作來讀取這個資料頁,讀出來的資料被多個查詢共享,減少不必要的 IO操作,提高系統執行的效率,但是不帶 ORDER BY子句的查詢產生的結果中資料行的順序可能會發生改變。如果值為off,這個特性將被關閉。預設值是on。

相關推薦

PostgreSQL資料庫配置檔案postgresql.conf全部引數

1 概述 所有的引數的名稱都是不區分大小寫的。每個引數的取值是布林型、整型、浮點型和字串型這四種類型中的一個,分別用boolean、integer、floating point和string表示。布林型的值可以寫成ON、OFF、 TRUE、 FALSE、 YES、 NO、

Mybatismapper配置檔案方法標籤的引數獲取

Mybatis框架中,Mapper檔案引數獲取一般有以下幾種: 1、引數個數為1個(string或者int)   dao層方法為以下兩種: /** * 單個int型 */ public List<UserComment&g

配置 sysctl.conf 系統引數

配置 sysctl.conf 系統引數(vi /etc/sysctl.conf) 引數: 1.記憶體&快取 kernel.sysrq = 0 核心設定驗證為0 kernel.core_uses_pid = 1 控制核心的系統請求除錯功能開啟,控制核心轉儲附加PID到核心檔名,適用於多

[Struts2] 配置檔案struts.xml和web.xml

 配置檔案struts.xml和web.xml。 其實要使Struts2可以工作,配置很簡單,套模板就好了。而且基本與版本無關。 如,只要struts2需要的基本jar包已經引入,那麼直接配置一下web.xml和struts.xml檔案。 web.xml中包含: <

Qt中Makefile檔案裡INCPATH和LIBS引數

1 LIBS中的-l 和 -L引數   -l 引數是用來指定程式要連線的庫, -l引數緊接著就是庫名, 庫名和真正的庫檔名的差別, 以數學庫為例, 其庫名為 m , 其 庫檔名為 libm.so,也就

java ee SSM框架連線資料庫四個配置檔案二: mybatis-config.xml檔案配置

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD

PostgreSQL的 pg_hba.conf 配置引數

pg_hba.conf 配置詳解 該檔案位於初始化安裝的資料庫目錄下 編輯 pg_hba.conf 配置檔案 postgres@clw-db1:/pgdata/9.6/poc/data> vi pg_hba.conf TYPE 引數設定

httpd配置檔案 /etc/httpd/conf.d/*.conf

httpd服務程式的配置資訊被寫到  /etc/httpd/conf.d/xxx.conf 這樣的檔案中,其實也就等於寫在主配置檔案 /etc/httpd/conf/httpd.conf裡。   因為這寫檔案在httpd主配置檔案生效的時候,就已經被載入進來了。

ssh中資料庫配置檔案加密方法

 在applicationContext.xml檔案中 <bean id="propertyConfigurer" class="com.common.util.ProPertyPlaceholderConfigure">       

SSM配置檔案

配置檔案:SSM 1.web.xml (springmvc的web.xml檔案< web-app>< /web-app>) <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="htt

SpringCloud配置檔案將變數寫入配置檔案統一管理

一些可能要修改的屬性值,我們可以寫入配置檔案,通過讀取配置檔案的方式,動態的注入,需要修改的時候,我們只需要修改配置檔案就可以了,避免了對程式碼的修改,方便維護 像這樣: //配置檔案中這麼寫 sms-verify: api-url: XXXXXXXXXXXXXXXX

資料庫配置檔案密碼加密

ConfigFilter的作用包括: 從配置檔案中讀取配置 從遠端http檔案中讀取配置 為資料庫密碼提供加密功能 1 配置ConfigFilter 1.1 配置檔案從本地檔案系統中讀取 <bean id="dataSource" class="com.al

springboot 資料庫配置檔案加密過程

用於application.properties資料庫密碼加密或者其他配置檔案內容加密 1.匯入jar包 <!--jdbc加密--> <dependency> <groupId>com.github.ulisesbocchio

MySQL資料庫配置檔案

cat /etc/my.cnf [mysqld] basedir = /usr/local/mysql datadir = /usr/local/mysql/data user=mysql port

Nginx轉發SpringBoot專案配置檔案:nginx.conf(實現前後端完全分離)

#user nobody; worker_processes 1; error_log D:\\Nginx\\nginx-1.15.6\logs\error.log; ######需要雙斜槓\\n,防止轉譯 #error_log logs/error.log notice; #erro

Nginx配置檔案(nginx.conf配置

歡迎掃碼加入Java高知群交流 Nginx的配置檔案nginx.conf配置詳解如下: user nginx nginx ; Nginx使用者及組:使用者 組。window下不指定 worker_processes 8; 工作程序:數目。根據硬體調整,通常等於CPU數

jsp中的資料庫配置檔案

##################################################################                   CHOOSE YOUR CONFIGURATION############################

DelphiWebMVC資料庫配置檔案加密處理

系統開發一般都離不開資料庫配置,此檔案比較敏感,賬號密碼都在裡面,如果進行加密處理,就安全多了,java或php,.net 等語言都能進行反編譯,安全上總感覺怕怕的,本框架有一點還好些,由於是編譯語言,反編譯機率小寫,如果再進行加殼處理,安全性好很多, 下面說下本框架對配置檔案進行加密:

MyBatis xml對映配置檔案properties

這些是外部化的, 可替代的屬性, 這些屬性也可以配置在典型的 Java 屬性配置檔案中, 或者通過 properties 元素的子元素來傳遞。例如: <properties resource="org/mybatis/example/config.properti

springboot 配置檔案多環境配置

1. application.properties 在父配置檔案(application.properties)中啟用要選用的子配置檔案 spring.profiles.active=dev 子配置檔案 dev 內容如下: server.port=9996 sprin