【PG體系結構】Postgresql 配置檔案詳解

xysoul_雲龍發表於2019-01-07
如果要檢視配置檔案中的一些選項,則可以登入psql後 使用 命令來檢視;
show  選項名;
show all;  #檢視所有資料庫引數的值

  

主要選項:
選項 預設值 說明 是否最佳化 原因
max_connections 100 允許客戶端的最大併發連線數目 因為在測試的過程中,100個連線已經足夠
fsync on 強制把資料同步更新到磁碟 因為系統的IO壓力很大,為了更好的測試其他配置的影響,把改引數改為off
shared_buffers 24MB 決定有多少記憶體可以被PostgreSQL用於快取資料(推薦記憶體的1/4) 在IO壓力很大的情況下,提高該值可以減少IO
work_mem 1MB 使內部排序和一些複雜的查詢都在這個buffer中完成 有助提高排序等操作的速度,並且減低IO
effective_cache_size 128MB 最佳化器假設一個查詢可以用的最大記憶體,和shared_buffers無關(推薦記憶體的1/2) 設定稍大,最佳化器更傾向使用索引掃描而不是順序掃描
maintenance_work_mem 16MB 這裡定義的記憶體只是被VACUUM等耗費資源較多的命令呼叫時使用 把該值調大,能加快命令的執行
wal_buffer 768kB 日誌快取區的大小 可以降低IO,如果遇上比較多的併發短事務,應該和commit_delay一起用
checkpoint_segments 3 設定wal log的最大數量數(一個log的大小為16M) 預設的48M的快取是一個嚴重的瓶頸,基本上都要設定為10以上
checkpoint_completion_target 0.5 表示checkpoint的完成時間要在兩個checkpoint間隔時間的N%內完成 能降低平均寫入的開銷
commit_delay
事務提交後,日誌寫到wal log上到wal_buffer寫入到磁碟的時間間隔。需要配合commit_sibling 能夠一次寫入多個事務,減少IO,提高效能
commit_siblings 5 設定觸發commit_delay的併發事務數,根據併發事務多少來配置
減少IO,提高效能
 
superuser_reserved_connections 3 預留給超級使用者的資料庫連線數目,該值必須小於max_connections。 減少IO,提高效能

   

一、連線配置與安全認證
1 、連線Connection Settings
 

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。每個連線佔用 400位元組共享記憶體。Note:  Increasing max_connections costs ~400 bytes of shared memory per  connection slot, plus lock space (see max_locks_per_transaction).

superuser_reserved_connections (integer)
這個引數只有在啟動資料庫時,才能被設定。它表示預留給超級使用者的資料庫連線數目。它的值必須小於max_connections。 普通使用者可以在資料庫中建立的最大的併發連線的數目是max_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,只有寫許可權才有意義,讀和執行許可權是沒有意義的。

 

#unix_socket_directories = '/tmp'       # comma-separated list of directories
                                        # (change requires restart)
#bonjour = off                          # advertise server via Bonjour
                                        # (change requires restart)
#bonjour_name = ''                      # defaults to the computer name
                                        # (change requires restart)

 

2、安全認證Security and Authentication

authentication_timeout (integer)

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

ssl (boolean)

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

ssl_ciphers (string)

指定可以使用的SSL加密演算法。檢視作業系統關於openssl的使用者手冊可以得到完整的加密演算法列表(執行命令openssl ciphers –v也可以得到)。
#ssl_prefer_server_ciphers = on         # (change requires restart)
#ssl_ecdh_curve = 'prime256v1'          # (change requires restart)
#ssl_renegotiation_limit = 0            # amount of data between renegotiations
#ssl_cert_file = 'server.crt'           # (change requires restart)
#ssl_key_file = 'server.key'            # (change requires restart)
#ssl_ca_file = ''                       # (change requires restart)
#ssl_crl_file = ''                      # (change requires restart)
#password_encryption = on
#db_user_namespace = off
 
# GSSAPI using Kerberos
#krb_server_keyfile = ''
#krb_caseins_users = off
 
# - TCP Keepalives -
tcp_keepalives_idle (integer)
這個引數可以在任何時候被設定。預設值是0,意思是使用作業系統的預設值。它設定TCP套接字的TCP_KEEPIDLE屬性。這個引數對於透過Unix-domain socket建立的資料庫連線沒有任何影響。即 間歇性傳送TCP心跳包,房子連線被網路裝置中斷。

tcp_keepalives_interval (integer)
這個引數可以在任何時候被設定。預設值是0,意思是使用作業系統的預設值。它設定TCP套接字的TCP_KEEPINTVL屬性。這個引數對於透過Unix-domain socket建立的資料庫連線沒有任何影響。

tcp_keepalives_count (integer)
這個引數可以在任何時候被設定。預設值是0,意思是使用作業系統的預設值。它設定TCP套接字的TCP_KEEPCNT屬性。這個引數對於透過Unix-domain socket建立的資料庫連線沒有任何影響。
 
二、檔案配置FILE LOCATIONS
# The default values of these variables are driven from the -D command-line
# option or PGDATA environment variable, represented here as ConfigDir.
 
#data_directory = 'ConfigDir'           # use data in another directory
                                        # (change requires restart)
#hba_file = 'ConfigDir/pg_hba.conf'     # host-based authentication file
                                        # (change requires restart)
#ident_file = 'ConfigDir/pg_ident.conf' # ident configuration file
                                        # (change requires restart)
 
# If external_pid_file is not explicitly set, no extra PID file is written.
#external_pid_file = ''                 # write an extra PID file
                                        # (change requires restart)
  
三、記憶體 Memory

shared_buffers (integer)

這個引數只有在啟動資料庫時,才能被設定。它表示資料緩衝區中的資料塊的個數,每個資料塊的大小是8KB。資料緩衝區位於資料庫的共享記憶體中,它越大越好,不能小於128KB。預設值是128MB。


temp_buffers (integer)

這個引數可以在任何時候被設定。預設值是8MB。它決定存放臨時表的資料緩衝區中的資料塊的個數,每個資料塊的大小是8KB。臨時表緩衝區存放在每個資料庫程式的私有記憶體中,而不是存放在資料庫的共享記憶體中。最小值800KB

max_prepared_transactions (integer)
這個引數只有在啟動資料庫時,才能被設定。它決定能夠同時處於prepared狀態的事務的最大數目(參考PREPARE TRANSACTION命令)。如果它的值被設為0。則將資料庫將關閉prepared事務的特性。它的值通常應該和max_connections的值一樣大。每個事務消耗600位元組(b)共享記憶體。

work_mem (integer)
這個引數可以在任何時候被設定。它決定資料庫的排序操作和雜湊表使用的記憶體緩衝區的大小。如果work_mem指定的記憶體被耗盡,資料庫將使用磁碟檔案進行完成操作,速度會慢很多。ORDER BY、DISTINCT和merge連線會使用排序操作。雜湊表在Hash連線、hash聚集函式和用雜湊表來處理IN謂詞中的子查詢中被使用。單位是KB,預設值是4MB。


maintenance_work_mem (integer)

這個引數可以在任何時候被設定。它決定資料庫的維護操作使用的記憶體空間的大小。資料庫的維護操作包括VACUUM、CREATE INDEX和ALTER TABLE ADD FOREIGN KEY等操作。 maintenance_work_mem的值如果比較大,通常可以縮短VACUUM資料庫和從dump檔案中恢復資料庫需要的時間。maintenance_work_mem存放在每個資料庫程式的私有記憶體中,而不是存放在資料庫的共享記憶體中。單位是KB,預設值是64MB。


max_stack_depth (integer)

這個引數可以在任何時候被設定,但只有資料庫超級使用者才能修改它。它決定一個資料庫程式在執行時的STACK所佔的空間的最大值。資料庫程式在執行時,會自動檢查自己的STACK大小是否超過max_stack_depth,如果超過,會自動終止當前事務。這個值應該比作業系統設定的程式STACK的大小的上限小1MB。使用作業系統命令“ulimit –s“可以得到作業系統設定的程式STACK的最大值。單位是KB,預設值是2MB。
#huge_pages = try                       # on, off, or try  (change requires restart)
#儘量使用大頁,需要作業系統的支援,配置vm.nr_hugepages*2MB大於 shared_buffers.
dynamic_shared_memory_type = posix     
                                         # the default is the first option
                                        # supported by the operating system:
                                        #   posix
                                        #   sysv
                                        #   windows
                                        #   mmap
                                        # use none to disable dynamic shared memory
#autovacuum_work_mem = -1              
# min 1MB, or -1 to use           maintenance_work_mem
 
四、資源(空閒空間對映)

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。
五、核心資源Kernel Resource Usage

max_files_per_process (integer)

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


shared_preload_libraries (string)

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

執行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。鎖住緩衝池,查詢共享的雜湊表以及掃描頁面的內容的開銷(credits)。

vacuum_cost_page_miss (integer)
這個引數可以在任何時候被設定。預設值是10。表示鎖住緩衝池,查詢共享雜湊表,從磁碟讀取需要的資料塊以及掃描它的內容的開銷。


vacuum_cost_page_dirty (integer)

這個引數可以在任何時候被設定。預設值是20。如果清理修改一個原先是乾淨的塊的預計開銷。它需要一個把髒的磁碟塊再次沖刷到磁碟上的額外開銷。


vacuum_cost_limit (integer)

這個引數可以在任何時候被設定。預設值是200。導致清理程式休眠的積累開銷。
七、後臺寫資料庫程式Background Writer
後臺寫資料庫程式負責將資料緩衝區中的被修改的資料塊(又叫髒資料塊)寫回到資料庫物理檔案中。
 

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指定的值)。一般使用預設值即可,不需要修改這個引數。這個引數的值越大,後臺寫資料庫程式每次寫的髒資料塊的個數就越多
----Asynchronous Behavior----
#effective_io_concurrency = 1           # 1-1000; 0 disables prefetching
#max_worker_processes = 8 
如果要使用 worker process,最多可以允許 fork多少個 worker程式
八、事務日誌預寫
 

full_page_writes (boolean)

這個引數只能在postgresql.conf檔案中被設定。預設值是on。開啟這個引數,可以提高資料庫的可靠性,減少資料丟失的機率,但是會產生過多的事務日誌,降低資料庫的效能。 即 伺服器在checkpoint之後在對頁面的第一次寫時將整個頁面寫到wal裡面。


wal_buffers (integer)
這個引數只有在啟動資料庫時,才能被設定。預設值是8。它指定事務日誌緩衝區中包含的資料塊的個數,每個資料塊的大小是8KB,所以預設的事務日誌緩衝區的大小是8*8=64KB。事務日誌緩衝區位於資料庫的共享記憶體中。即 放在共享記憶體裡用於wal 資料的磁碟頁面緩衝區的數目,最小32kb,-1表示基於share buffer的設定。

wal_writer_delay (integer)
這個引數只能在postgresql.conf檔案中被設定。它決定寫事務日誌程式的睡眠時間。WAL程式每次在完成寫事務日誌的任務後,就會睡眠wal_writer_delay指定的時間,然後醒來,繼續將新產生的事務日誌從緩衝區寫到WAL檔案中。單位是毫秒(millisecond),預設值是200。 即 每隔多長時間進行一次寫操作。


commit_delay (integer)

這個引數可以在任何時候被設定。它設定事務在發出提交命令以後的睡眠時間,只有在睡眠了commit_delay指定的時間以後,事務產生的事務日誌才會被寫到事務日誌檔案中,事務才能真正地提交。增大這個引數會增加使用者的等待時間,但是可以讓多個事務被同時提交,提高系統的效能。如果資料庫中的負載比較高,而且大部分事務都是更新型別的事務,可以考慮增大這個引數的值。下面的引數commit_siblings會影響commit_delay是否生效。預設值是0,單位是微秒(microsecond)。0表示無延遲。即 向WAL緩衝區寫入記錄和將緩衝區重新整理到磁碟上之間的時間延遲。


commit_siblings (integer)

這個引數可以在任何時候被設定。這個引數的值決定引數commit_delay是否生效。假設commit_siblings的值是5,如果一個事務發出一個提交請求,此時,如果資料庫中正在執行的事務的個數大於或等於5,那麼該事務將睡眠commit_delay指定的時間。如果資料庫中正在執行的事務的個數小於5,這個事務將直接提交。預設值是5。即 在commit_delay時間內,最少開啟的併發事務數(1-1000);
      
#wal_level = minimal        預寫日誌模式           
                                        # minimal, archive, hot_standby, or logical
                                        # (change requires restart)
#fsync = on                          設定同步方式  
                                         # turns forced synchronization on or off
#synchronous_commit = on          如果磁碟的IOPS一般,建議使用非同步提交來提高效能,但是資料庫crash或作業系統crash時,最多可能丟失2*wal_writer_delay時間段產生的事務日誌(在wal buffer中)     
                                         # synchronization level;
                                        # off, local, remote_write, or on
#wal_sync_method = fsync        用來向磁碟強制更新wal資料的方法。如果fsync 是關閉的,那這個設定就是無關無效的。       
                                        # the default is the first option
                                        # supported by the operating system:
                                        #   open_datasync(用O_DSYNC選項的open()開啟WAL檔案)
                                        #   fdatasync (default on Linux) 每次提交的時候都呼叫fdatasync()
                                        #   fsync 每次提交的時候都呼叫fsync
                                        #   fsync_writethrough每次提交的時候都呼叫fsync(),強制寫出任何磁碟寫緩衝區
                                        #   open_sync 用O_DSYNC選項的open()開啟WAL檔案
#wal_log_hints = off                   
                                        # also do full page writes of non-critical updates  (change requires restart)
 
九、
 
十、檢查點Checkpoints
checkpoint_segments (integer) in logfile segments, min 1, 16MB each
這個引數只能在postgresql.conf檔案中被設定。預設值是3。它影響系統何時啟動一個檢查點操作。如果上次檢查點操作結束以後,系統產生的事務日誌檔案的個數超過checkpoint_segments的值,系統就會自動啟動一個檢查點操作。增大這個引數會增加資料庫崩潰以後恢復操作需要的時間。即 最大多少大小的段發生一次checkpoint,等於shared_buffers除以單個wal segment的大小。

checkpoint_timeout (integer) range 30s-1h

這個引數只能在postgresql.conf檔案中被設定。單位是秒,預設值是300。它影響系統何時啟動一個檢查點操作。如果現在的時間減去上次檢查點操作結束的時間超過了checkpoint_timeout的值,系統就會自動啟動一個檢查點操作。增大這個引數會增加資料庫崩潰以後恢復操作需要的時間。即 最大多長時間發生一次checkpoint


checkpoint_completion_target (floating point)

這個引數控制檢查點操作的執行時間。合法的取值在0到1之間,預設值是0.5。不要輕易地改變這個引數的值,使用預設值即可。 這個引數只能在postgresql.conf檔案中被設定。
#checkpoint_warning = 30s
 
十一、磁碟 Disk
#temp_file_limit = -1                   # limits per-session temp file space
                                                       # in kB, or -1 for no limit
每個會話的臨時檔案空間(kb),-1 表示無限制
 
十二、歸檔模式Archiving

archive_mode (boolean)

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


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

archive_timeout (integer)

這個引數只能在postgresql.conf檔案中被設定。預設值是0。單位是秒。如果archive_timeout的值不是0,而且當前時間減去資料庫上次進行事務日誌檔案切換的時間大於archive_timeout的值,資料庫將進行一次事務日誌檔案切換。一般情況下,資料庫只有在一個事務日誌檔案寫滿以後,才會切換到下一個事務日誌檔案,設定這個引數可以讓資料庫在一個事務日誌檔案尚未寫滿的情況下切換到下一個事務日誌檔案。
十三、最佳化器引數QUERY TUNING
1、存取方法引數 Planner Method Configuration
下列引數控制查詢最佳化器是否使用特定的存取方法。除非對最佳化器特別瞭解,一般情況下,使用它們預設值即可。
enable_bitmapscan (boolean)
開啟或者關閉規劃器對點陣圖掃描規劃型別的使用 。預設值是 on。
enable_hashagg (boolean)
開啟或者關閉查詢規劃器對雜湊聚集規劃型別的使用。預設值是 on。
enable_hashjoin (boolean)
開啟或者關閉查詢規劃器對雜湊連線規劃型別的使用。預設值是 on。
enable_indexscan (boolean)
開啟或者關閉查詢規劃器對索引掃描規劃型別的使用。預設值是 on。
enable_mergejoin (boolean)
開啟或者關閉查詢規劃器對合並連線規劃型別的使用。預設值是 on。
enable_nestloop (boolean)
開啟或者關閉查詢規劃器對巢狀迴圈連線規劃型別的使用。預設值是 on。
enable_seqscan (boolean)
開啟或者關閉查詢規劃器對順序掃描規劃型別的使用。預設值是 on。
enable_sort (boolean)
開啟或者關閉查詢規劃器使用明確的排序步驟。預設值是 on。
enable_tidscan (boolean)
開啟或者關閉查詢規劃器對TID掃描規劃型別的使用。預設值是 on。
 
2、 最佳化器成本常量 Planner Cost Constants

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


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。
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之間。
 
4、其它最佳化器引數 Other Planner Options

default_statistics_target (integer)

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


constraint_exclusion (boolean)

如果該引數的值是on,查詢最佳化器將使用表上的約束條件來最佳化查詢。如果它的值是off,查詢最佳化器不會使用表上的約束條件來最佳化查詢。預設值是off。
#cursor_tuple_fraction = 0.1            # range 0.0-1.0
#from_collapse_limit = 8
#join_collapse_limit = 8                   # 1 disables collapsing of explicit
                                                            # JOIN clauses
十四、資料庫執行日誌配置引數
1、 Where to Log
 
log_destination = 'stderr'              # Valid values are combinations of
                                        # stderr, csvlog, syslog, and eventlog,
                                        # depending on platform.  csvlog
                                        # requires logging_collector to be on.
 
# This is used when logging to stderr:
logging_collector = on                  # Enable capturing of stderr and csvlog
                                        # into log files. Required to be on for
                                        # csvlogs.
                                        # (change requires restart)
# These are only used if logging_collector is on:
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小時的日誌資訊。
 
# These are relevant when logging to syslog:
#syslog_facility = 'LOCAL0'
#syslog_ident = 'postgres'
 
# This is only relevant when logging to eventlog (win32):
#event_source = 'PostgreSQL
2、 When to Log
 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。只有超級使用者才能修改這個引數。
 

訊息嚴重級別

嚴重級別
用法

DEBUG1..DEBUG5
報告詳細的除錯資訊。

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

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

WARNING
報告警告資訊。

ERROR
報告錯誤資訊。

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

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

PANIC
報告導致整個資料庫被關閉的錯誤資訊。
3、What to Log

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檔案中被設定。
log_line_prefix = '< %m >'                      # special values:
轉義序列
#   %a = application name
#   %u = user name  使用者名稱
#   %d = database name  資料庫名
#   %r = remote host and port  客戶端機器名或IP地址,還有客戶端埠
#   %h = remote host  客戶端機器名或IP地址
#   %p = process ID  程式ID
#   %t = timestamp without milliseconds  帶微秒的時間
#   %m = timestamp with milliseconds  不帶微秒的時間
#   %i = command tag  命令標籤: 會話當前執行的命令型別
#   %e = SQL state
#   %c = session ID 會話ID
#   %l = session line number 每個會話的日誌編號,從1開始
#   %s = session start timestamp 程式啟動時間
#   %v = virtual transaction ID  虛擬事務ID (backendID/localXID)
#   %x = transaction ID (0 if none) 事務ID (0表示沒有分配事務ID)
#   %q = stop here in non-session 不產生任何輸出。如果當前程式是backend程式,忽略這個轉義序列,繼續處理後面的轉義序列。如果當前程式不是backend程式,忽略這個轉義序列和它後面的所有轉義序列。
#    processes
#   %%     '%' 字元%

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檔案中被設定
 
十五、資料庫執行統計相關引數RUNTIME STATISTICS
下面的引數控制是否蒐集特定的資料庫執行統計資料:
---Query/Index Statistics Collector----
 
track_activities (boolean)

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


track_counts (boolean)

是否收集資料庫活動的統計資料。預設值是on。只有超級使用者才能修改這個引數。
 
#track_io_timing = off
#track_functions = none                 # none, pl, all
#track_activity_query_size = 1024       # (change requires restart)
#update_process_title = on
#stats_temp_directory = 'pg_stat_tmp'
 
---統計監測Statistics Monitoring--
  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報告資料庫執行器的統計資料。只有超級使用者才能修改這些引數。
十六、自動垃圾收集相關引數AUTOVACUUM PARAMETERS
下面的引數控制自動垃圾收集的行為:
 

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中被設定。
autovacuum_freeze_max_age = 200000000 
# maximum XID age before forced vacuum # (change requires restart)
指定表上事務的最大年齡,預設2億,達到這個閥值將觸發 autovacuum程式,從而避免 wraparound. 表上的事務年齡可透過 pg_class.relfrozenxid查詢
 
autovacuum_multixact_freeze_max_age = 400000000       
# maximum multixact age
# before forced vacuum
# (change requires restart)
 
autovacuum_vacuum_cost_delay = 20ms   
# default vacuum cost delay for
# autovacuum, in milliseconds;
# -1 means use vacuum_cost_delay
當 autovacuum程式即將執行時,對vacuum執行cost進行評估,如果超過 autovacuum_vacuum_cost_limit的值時,則延遲,這個延遲的時間值即為改成的值.
 
autovacuum_vacuum_cost_limit = -1     
# default vacuum cost limit for
# autovacuum, -1 means use
# vacuum_cost_limit
這個值 為 autovacuum程式的評估閥值,預設值為-1,表使用 vacuum_cost_limit值,如果在執行 autovacuum程式期間評估的 cost 超過 autovacuum_vacuum_cost_limit,則 autovacuum程式則會休眠
 
十七、鎖管理LOCK MANAGEMENT

deadlock_timeout(integer)

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


max_locks_per_transaction(integer)

這個引數控制每個事務能夠得到的平均的物件鎖的個數。預設值是64。資料庫在啟動以後建立的共享鎖表的最大可以儲存max_locks_per_transaction * (max_connections + max_prepared_transactions)個物件鎖。單個事務可以同時獲得的物件鎖的數目可以超過max_locks_per_transaction的值,只要共享鎖表中還有剩餘空間。每個鎖佔用270個位元組的共享記憶體
# lock table slots.
#max_pred_locks_per_transaction = 64    # min 10
                                        # (change requires restart)
 
十八、客戶端連線管理CLIENT CONNECTION DEFAULTS
 
# - Statement Behavior -
 
#search_path = '"$user",public'         # schema names
#default_tablespace = ''                # a tablespace name, '' uses the default
#temp_tablespaces = ''                  # a list of tablespace names, '' uses
                                        # only default tablespace
#check_function_bodies = on
#default_transaction_isolation = 'read committed'
#default_transaction_read_only = off
#default_transaction_deferrable = off
#session_replication_role = 'origin'
#statement_timeout = 0                  # in milliseconds, 0 is disabled
#lock_timeout = 0                       # in milliseconds, 0 is disabled
#vacuum_freeze_min_age = 50000000
#vacuum_freeze_table_age = 150000000
#vacuum_multixact_freeze_min_age = 5000000
#vacuum_multixact_freeze_table_age = 150000000
#bytea_output = 'hex'                   # hex, escape
#xmlbinary = 'base64'
#xmloption = 'content'
#gin_fuzzy_search_limit = 0
 
# - Locale and Formatting -
 
datestyle = 'iso, mdy'
#intervalstyle = 'postgres'
timezone = 'PRC'
#timezone_abbreviations = 'Default'     # Select the set of available time zone
                                        # abbreviations.  Currently, there are
                                        #   Default
                                        #   Australia (historical usage)
                                        #   India
                                        # You can create your own file in
                                        # share/timezonesets/.
#extra_float_digits = 0                 # min -15, max 3
#client_encoding = sql_ascii            # actually, defaults to database
                                        # encoding
 
# These settings are initialized by initdb, but they can be changed.
lc_messages = 'en_US.UTF-8'                     # locale for system error message
                                        # strings
lc_monetary = 'en_US.UTF-8'                     # locale for monetary formatting
lc_numeric = 'en_US.UTF-8'                      # locale for number formatting
lc_time = 'en_US.UTF-8'                         # locale for time formatting
 
# default configuration for text search
default_text_search_config = 'pg_catalog.english'
 
# - Other Defaults -
 
#dynamic_library_path = '$libdir'
#local_preload_libraries = ''
#session_preload_libraries = ''
 
十九、錯誤處理ERROR HANDLING
#exit_on_error = off                    # terminate session on any error?
#restart_after_crash = on               # reinitialize after backend crash?
 
二十、配置檔案包括 CONFIG FILE INCLUDES
一個配置檔案也可以包含其他配置檔案,使用include 指令能夠達到這個目的。
比如 在postgresql.conf檔案中 有如下一行:
include 'my.confg'
這樣的話 my.confg檔案中的配置資訊也會被資料庫讀入。
include 指令指定的配置檔案也可以用include指令再包含其他配置檔案。如果include指令中指定的檔名不是絕對路徑,資料庫會在postgresql.conf檔案所在的目錄下查詢這個檔案。
#include_dir = 'conf.d'                 # include files ending in '.conf' from
                                        # directory 'conf.d'
#include_if_exists = 'exists.conf'      # include file only if it exists
#include = 'special.conf'               # include file
 
二十一、版本\平臺相容VERSION/PLATFORM COMPATIBILITY
# - Previous PostgreSQL Versions -
 
#array_nulls = on
#backslash_quote = safe_encoding        # on, off, or safe_encoding
#default_with_oids = off
#escape_string_warning = on
#lo_compat_privileges = off
#quote_all_identifiers = off
#sql_inheritance = on
#standard_conforming_strings = on
#synchronize_seqscans = on
 
# - Other Platforms and Clients -
 
#transform_null_equals = off
 
二十二、複製REPLICATION
# - Sending Server(s) -
 
# Set these on the master and on any standby that will send replication data.
 
#max_wal_senders = 0            # max number of walsender processes
                                # (change requires restart)
#wal_keep_segments = 0          # in logfile segments, 16MB each; 0 disables
#wal_sender_timeout = 60s       # in milliseconds; 0 disables
 
#max_replication_slots = 0      # max number of replication slots
                                # (change requires restart)
 
# - Master Server -
 
# These settings are ignored on a standby server.
 
#synchronous_standby_names = '' # standby servers that provide sync rep
                                # comma-separated list of application_name
                                # from standby(s); '*' = all
#vacuum_defer_cleanup_age = 0   # number of xacts by which cleanup is delayed
 
# - Standby Servers -
 
# These settings are ignored on a master server.
 
#hot_standby = off                      # "on" allows queries during recovery
                                        # (change requires restart)
#max_standby_archive_delay = 30s        # max delay before canceling queries
                                        # when reading WAL from archive;
                                        # -1 allows indefinite delay
#max_standby_streaming_delay = 30s      # max delay before canceling queries
                                        # when reading streaming WAL;
                                        # -1 allows indefinite delay
#wal_receiver_status_interval = 10s     # send replies at least this often
                                        # 0 disables
#hot_standby_feedback = off             # send info from standby to prevent
                                        # query conflicts
#wal_receiver_timeout = 60s             # time that receiver waits for
                                        # communication from master
                                        # in milliseconds; 0 disables


轉自:https://www.cnblogs.com/zhaowenzhong/p/5667434.html

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29487349/viewspace-2374748/,如需轉載,請註明出處,否則將追究法律責任。

相關文章