您好,登錄后才能下訂單哦!
本篇內容介紹了“怎么查看Postgresql配置文件”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
如果要查看配置文件中的一些選項,則可以登錄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
“怎么查看Postgresql配置文件”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。