PostgreSQL服務器參數配置

服務器配置
1 設置參數
1.1 參數名稱和值
全部參數名都是大小寫不敏感的。每一個參數均可以接受五種類型之一的值: 布爾、字符串、整數、 浮點數或枚舉。
布爾: 值能夠被寫成 on, off, true, false, yes, no, 1, 0 (都是大小寫不敏感的)
字符串: 一般值被包括在單引號內,值內部的任何單引號都須要被雙寫。
數字(整數和浮點): 只對浮點參數容許一個小數點。不要使用千位分隔符。不要求引號。
帶單位的數字: 一些數字參數具備隱含單位,由於它們描述內存或時間量。單位多是千
字節、塊(一般是 8KB)、 毫秒、秒或分鐘。
默認單位能夠通 過引用pg_settings.unit來找到,例如時間值能夠是’120 ms’
可用的內存單位是kB(千字節)、MB(兆字節)和GB(吉字節)。內存單位的乘數是1024 而不是 1000。
可用的時間單位是ms(毫秒)、s(秒)、min(分鐘)、 h(小時)和d(天)
枚舉: 枚舉類型的參數以與字符串參數相同的方式指定,但被限制到一組有限的值。
1.2 經過配置文件影響參數
設置這些參數最基本的方法是編輯postgresql.conf文件
# This is a comment
log_connections = yes
log_destination = ’syslog’
search_path = ’"$user", public’
shared_buffers = 128MB
每一行指定一個參數。名稱和值之間的等號是可選的。空白沒有意義
除postgresql.conf以外,PostgreSQL 數據目錄還包含一個文件 postgresql.auto.conf,
它具備和postgresql.conf相同的格式可是不該該被手工編輯。這個 文件保存了通
過ALTER SYSTEM命令提供的設置。每當postgresql.conf被讀 取時這個文件會被自
動讀取,而且它的設置會以一樣的方式生效。 postgresql.auto.conf中的設置會覆
蓋postgresql.conf 中的設置。
1.3 經過SQL影響參數
ALTER SYSTEM命令
ALTER DATABASE命令容許針對一個數據庫覆蓋其全局設置
ALTER ROLE命令容許用用戶指定的值來覆蓋全局設置和數據庫設置
SHOW命令容許察看全部參數的當前值。
SET命令容許修改對於一個會話能夠本地設置的參數的當前值, 它對其餘會話沒有影響。
此外,系統視圖pg_settings能夠被用來查看和改變 會話本地的值
SET configuration_parameter TO DEFAULT;
等效於:
UPDATE pg_settings SET setting = reset_val WHERE name = ’configuration_parameter’;
1.4 經過Shell 影響參數
在服務器啓動期間,能夠經過-c命令行參數把參數設置傳遞給 postgres命令。
postgres -c log_connections=yes -c log_destination='syslog'這種方式提供的設置會覆蓋經過postgresql.conf
1.5 管理配置文件內容
除了單個參數設置,postgresql.conf文件能夠包含包括指令,它指定要讀入和處理的另外一
個文件,
include ’filename’
include_dir ’directory’
include ’shared.conf’
include ’memory.conf’
include ’server.conf’
2. 文件位置
PostgreSQL還使用另外兩個手工編輯的配置文件,它們控制客戶端認證。默認狀況下,全部三個配置文件
都存放在數據庫集簇的數據目錄中。
data_directory (string)指定用於數據存儲的目錄。這個選項只能在服務器啓動時設置
config_file (string) 指定主服務器配置文件(一般叫postgresql.conf)。
hba_file (string)指定基於主機認證配置文件(一般叫pg_hba.conf)。 這個參數只能在服務器啓動的時候設置。
ident_file (string)用戶名稱映射的配置文件(一般叫pg_ident.conf)
external_pid_file (string)指定可被服務器建立的用於管理程序的額外進程 ID(PID)文件。
3. 鏈接和認證
listen_addresses (string)指定服務器在哪些 TCP/IP 地址上監聽客戶端鏈接。值的形式是一個逗號分隔的主機名
和/或數字 IP 地址列表。特殊項*對應全部可用 IP 接口。項0.0.0.0容許監聽全部 IPv4
地址而且::容許監聽全部 IPv6 地址。若是列表爲空,服務器將根本不會監放任何 IP 接
口,在這種狀況中只能使用 Unix 域套接字來鏈接它。默認值是localhost,它只容許創建
本地 TCP/IP 「環回」鏈接。--這個參數只能在服務器啓動時設置
port (integer)服務器監聽的 TCP 端口;默認是 5432 。請注意服務器會同一個端口號監聽全部的 IP 地址。這個參數只能在服務器啓動時設置。
max_connections (integer) 決定數據庫的最大併發鏈接數。默認值一般是 100 個鏈接,啓動時設置
superuser_reserved_connections (integer) 決 定 爲PostgreSQL超 級 用 戶 連 接 而 保 留 的 連 接「槽」數 。同時活躍的併發鏈接最多max_connections個。
默認值是 3 。這個值必須小於max_connections的值。,啓動時設置
unix_socket_directories (string)指定服務器用於監聽來自客戶端應用的鏈接的 Unix 域套接字目錄。逗號分隔多個套接字
Windows下沒有 Unix 域套接字,所以這個參數與 Windows 無關。
unix_socket_group (string)設置 Unix 域套接字的所屬組(套接字的所屬用戶老是啓動服務器的用戶)。
unix_socket_permissions (integer)設置 Unix 域套接字的訪問權限。Unix 域套接字使用普通的 Unix 文件系統權限集。
默認的權限是0777,意思是任何人均可以鏈接。合理的候選是0770(只有用戶和同組
的人能夠訪問, 又見unix_socket_group)和0700(只有用戶本身能夠訪問)啓動時設置。
bonjour (boolean)經過Bonjour廣告服務器的存在。默認值是關閉。 這個參數只能在服務器啓動時設置
bonjour_name (string)指定Bonjour服務名稱。空字符串」(默認值)表示使用計算機名。
tcp_keepalives_idle (integer)
指定不活動多少秒以後經過 TCP 向客戶端發送一個 keepalive 消息。 0 值表示使用默認
值。這個參數只有在支持TCP_KEEPIDLE或TCP_KEEPALIVE符號的系統或 Windows 上纔可使用。在其餘系統上,它必須爲零。
tcp_keepalives_interval (integer) 指定在多少秒以後重發一個尚未被客戶端告知已收到的 TCP keepalive 消息。0 值表示
使用系統默認值。
tcp_keepalives_count (integer)指定與客戶端的服務器鏈接被認爲死掉以前容許丟失的 TCP keepalive 數量。0 值表示
使用系統默認值。
3.2 安全和認證
authentication_timeout (integer)完成客戶端認證的最長時間,以秒計。若是一個客戶端沒有在這段時間裏完成 認證協
議,服務器將關閉鏈接。默認值是 1分鐘(1m)。參數只能在服務器命令行上或者在postgresql.conf文件中設置。
ssl (boolean) 啓用SSL鏈接。默認是off,SSL通訊只能和 TCP/IP 鏈接一塊兒使用。
ssl_ca_file (string)指定包含 SSL 服務器證書頒發機構(CA)的文件名。默認值爲空,表示不載入 CA 文件,而且不執行客戶端證書驗證
ssl_cert_file (string)指定包含 SSL 服務器證書的文件名。默認值是server.crt。
ssl_crl_file (string)指定包含 SSL 服務器證書撤銷列表(CRL)的文件名。默認值爲空
ssl_key_file (string)指定包含 SSL 服務器私鑰的文件名。默認值爲server.key。
ssl_ciphers (string)指定一個SSL密碼列表,用於安全鏈接。
默認值的解釋:
HIGH使用來自HIGH組的密碼的密碼組(例如 AES, Camellia, 3DES)
MEDIUM使用來自MEDIUM組的密碼的密碼組(例如 RC4, SEED)
+3DESOpenSSL 對HIGH的默認排序是有問題的,由於它認爲 3DES 比 AES128 更高。這是
錯誤的,由於 3DES 提供的安全性比 AES128 低,而且它也更加慢。 +3DES把它重
新排序在全部其餘HIGH和 MEDIUM密碼以後。
!aNULL禁用不作認證的匿名密碼組。這類密碼組容易收到中間人攻擊,所以不該被使用。
ssl_prefer_server_ciphers (bool)
指定是否使用服務器的 SSL 密碼首選項,而不是用客戶端的。默認爲真
ssl_ecdh_curve (string)
指定用在ECDH密鑰交換中的曲線名稱。它須要被全部鏈接的客戶端支持。
password_encryption (boolean)當 在CREATE USER或ALTER ROLE中指定了一個密碼而沒有寫ENCRYPTED或UNENCRYPTED時,
這個參數決定是否密碼會被加密。默認值是on(加密密碼)。
krb_server_keyfile (string)設 置 Kerberos 服 務 器 密 鑰 文 件 的 位 置 。
krb_caseins_users (boolean)設置 Kerberos 和 GSSAPI 用戶名是否應區分大小寫。默認是off(區分大小寫)。
db_user_namespace (boolean)容許針對每一個數據庫的用戶名。默認是關閉的。
若是打開這個參數,你應該以username@dbname的方式建立用戶。
打開這個參數以後,你仍是可以建立普通的全局用戶。只要在客戶端指定用戶名時附加
一個@,例如joe@。 在服務器查找這個用戶名以前,這個@會被剝除。
4. 資源消耗
4.1. 內存
shared_buffers (integer)設置數據庫服務器將使用的共享內存緩衝區量。默認一般是 128 兆字節(128MB)
若是有一個專用的 1GB 或更多內存的數據庫服務器, 一個合理的shared_buffers開
始值是系統內存的 25%。 即便很大的shared_buffers有效, 也會形成一些工做負
載, 但由於PostgreSQL一樣依賴操做系統的高速緩衝區, 將shared_buffers設置爲
超過 40% 的RAM不太可能比一個小點值工做得更好。
shared_buffers更大的 設置一般要求對max_wal_size也作相應增長。
huge_pages (enum)啓用/禁用巨型內存頁面的使用。可用的值是 try(默認)、on、 和off。
當huge_pages被設置爲try時,服務器將 嘗試使用巨型頁面,若是失敗則會轉回去使用
正常的分配。若是設置爲 on,使用巨型頁面失敗會阻止服務器啓動。若是設置爲 off,
則不會使用巨型頁面。
temp_buffers (integer)設置每一個數據庫會話使用的臨時緩衝區的最大數目。這些都是會話的本地緩衝區,只用
於訪問臨時表。默認是 8 兆字節(8MB)。
max_prepared_transactions (integer)設置能夠同時處於「prepared」狀態的事務的最大數目把這個參數設置 爲零(這是默認設置)將禁用預備事務特性。
若是你不打算使用預備事務,能夠把這個參數設置爲零來防止意外建立預備事務。
work_mem (integer)指定在寫到臨時磁盤文件以前被內部排序操做和哈希表使用的內存量。該值默認爲四兆字節(4MB)。
注意對於一個複雜查詢, 可能會並行運行好幾個排序或者哈希操
做;每一個操做都會被容許使用這個參數指定的內存量,而後纔會開始寫數據到臨時文
件。一樣,幾個正在運行的會話可能併發進行這樣的操做。所以被使用的總內存可能
是work_mem值的好幾倍,在選擇這個值時必定要記住這一點。ORDER BY、DISTINCT和
歸併鏈接都要用到排序操做。哈希鏈接、基於哈希的彙集以及基於哈希的IN子查詢處理
中都要用到哈希表。
maintenance_work_mem (integer)指定在維護性操做(例如VACUUM、CREATE INDEX和ALTER TABLE ADD FOREIGN KEY)
中使用的 最大的內存量。其默認值是 64 兆字節(64MB)。由於在一個數據庫會話中,
一個時刻只有一個這樣的操做能夠被執行,而且一個數據庫安裝一般不會有太多這樣的
操做併發執行, 把這個數值設置得比work_mem大不少是安全的。 更大的設置能夠改進
清理和恢復數據庫轉儲的性能。
注意當自動清理運行時,可能會分配這個內存的autovacuum_max_workers倍,所以要小
心不要把該默認值設置得過高。
autovacuum_work_mem (integer)指定每一個自動清理工做者進程能使用的最大內存量。其默認值爲 -1
max_stack_depth (integer)指定服務器的執行堆棧的最大安全深度。
dynamic_shared_memory_type (enum)指定服務器應該使用的動態共享內存實現。
4.2. 磁盤
temp_file_limit (integer)指定一個會話能用於臨時文件(如排序和哈希臨時文件,或者用於保持遊標的存儲文
件)的最大磁盤空間量。一個試圖超過這個限制的事務將被取消。這個值以千字節計,
而且-1(默認值)意味着沒有限制。
4.3. 內核資源使用
max_files_per_process (integer)設置每一個服務器子進程容許同時打開的最大文件數目。默認是 1000 個文件。
若是你發現本身看到了「Too many open files」這樣的失敗,可嘗試減少這個設置。
4.4. 基於代價的清理延遲
vacuum_cost_delay (integer)進程超過代價限制後將休眠的時間長度,以毫秒計。其默認值爲0,這將禁用基於代價的清理延遲特性。
vacuum_cost_page_hit (integer)清理一個在共享緩存中找到的緩衝區的估計代價。它表示鎖住緩衝池、查找共享哈希表和掃描頁內容的代價。默認值爲1。
vacuum_cost_page_miss (integer)清理一個必須從磁盤上讀取的緩衝區的代價。它表示鎖住緩衝池、查找共享哈希表、從
磁盤讀取須要的塊以及掃描其內容的代價。默認值爲10。
vacuum_cost_page_dirty (integer)當清理修改一個以前乾淨的塊時須要花費的估計代價。它表示再次把髒塊刷出到磁盤所
須要的額外I/O。默認值爲20。
vacuum_cost_limit (integer)將致使清理進程休眠的累計代價。默認值爲200。
注意: 有些操做會保持關鍵性的鎖,這樣能夠儘快完成。基於代價的清理延遲在這類操做
期間不會發生。所以有可能代價會累計至大大超過指定的限制。爲了防止在這種狀況下的
無心義的長時間延遲,實際延遲的計算方式是vacuum_cost_delay * accumulated_balance /
vacuum_cost_limit,且最大值是vacuum_cost_delay * 4。
4.5. 後臺寫入器
有一個獨立的服務器進程,叫作後臺寫入器,它的功能就是發出寫「髒」(新的或修改過的)共享緩衝區的命令。
bgwriter_delay (integer)指定後臺寫入器活動輪次之間的延遲。默認值是 200 毫秒(200ms)
bgwriter_lru_maxpages (integer)在每一個輪次中,不超過這麼多個緩衝區將被後臺寫入器寫出。默認值是 100個緩衝區。
bgwriter_lru_multiplier (floating point)
每一輪次要寫的髒緩衝區的數目基於最近幾個輪次中服務器進程須要的新緩衝區的數目。默認值是 2.0
4.6. 異步行爲
effective_io_concurrency (integer)
設置PostgreSQL能夠同時被執行的併發磁盤 I/O 操做的數量。調高這個值,能夠增長任
何單個PostgreSQL會話試圖並行發起的 I/O 操做的數目。 容許的範圍是 1 到 1000,或 0
表示禁用異步 I/O 請求。當前這個設置僅影響位圖堆掃描。
max_worker_processes (integer)設置系統可以支持的後臺進程的最大數量。
5. 預寫式日誌
5.1. 設置
wal_level (enum)決定多少信息寫入到 WAL 中。默認值是minimal, 只寫入從崩潰或當即關機恢復所須要的信息。
archive添加 WAL 歸檔所須要的日誌。hot_standby則進一步增長在一個後備服務器上運行只讀查詢所需的信息。 最後,
logical會增長支持邏輯解碼所需的信息。
在minimal級別中,某些批量操做的 WAL 日誌能夠被安全地跳過,這可使那些操做更快
CREATE TABLE AS
CREATE INDEX
CLUSTER
COPY到在同一個事務中被建立或截斷的表中
所以,要啓用 WAL 歸檔(archive_mode)和流複製,必須使用archive或更高級別。
fsync (boolean)若是打開這個參數,PostgreSQL服務器將嘗試確保更新被物理地寫入到磁盤,
這保證了數據庫集簇在一次操做系統或者硬件崩潰後能恢復到一個一致的狀態。
雖然關閉fsync經常能夠獲得性能上的收益,但當發生斷電或系統崩潰時可能形成不可恢復的數據損壞。
synchronous_commit (enum)指定在命令返回「success」指示給客戶端以前,一個事務是否須要等待 WAL 記錄被寫入
磁盤。合法的值是on、remote_write、local和off。默認的而且安全的設置是on。
不一樣於fsync,將這個參數設置爲off不會產生數據庫不一致性的風險:一個操做系統或數據庫崩潰可能會形成一些最近聽說已提
交的事務丟失,但數據庫狀態是一致的,就像這些事務已經被幹淨地停止。
當使用同步複製時,它將對等待本地刷寫磁盤和 WAL 記錄複製很敏感,或者
對容許事務異步提交很敏感。不過,設置local能夠用於但願等待本地刷寫磁
盤 但 不 等 待 同 步 復 制 的 事 務 。 如 果 沒 有 設 置synchronous_standby_names, 設
置on、remote_write和local都提供了一樣的同步級別:事務提交只等待本地刷寫磁
盤。這個參數能夠隨時被修改;任何一個事務的行爲由其提交時生效的設置決定。
例如,當默認是相反時,實現一個單一
多語句事務的異步提交,在事務中發出SET LOCAL synchronous_commit TO OFF。
wal_sync_method (enum)用來向強制 WAL 更新到磁盤的方法。若是fsync是關閉的,那麼這個設置就不相關,因
爲 WAL 文件更新將根本不會被強制。
open_* 選項也可使用O_DIRECT(若是可用)。
full_page_writes (boolean)當這個參數爲打開時,PostgreSQL服務器在一個檢查點以後的頁面的第一次修改期間將
每一個頁面的所有內容寫到 WAL 中。
關閉這個選項並不影響用於時間點恢復(PITR)的 WAL 歸檔使用
wal_log_hints (boolean)當這個參數爲on時,PostgreSQL服務器一個檢查點以後頁面被第一次修改期間把該磁盤
頁面的整個內容都寫入 WAL,即便對所謂的提示位作非關鍵修改也會這樣作。默認值是off。
wal_compression (boolean)
這個參數爲on, full_page_writes爲on,或者基礎備份中, PostgreSQL服務器壓縮完整
頁面圖片到WAL中。 在WAL回放中解壓壓縮的頁面圖片。缺省值爲off。
wal_buffers (integer)用於還未寫入磁盤的 WAL 數據的共享內存量。默認值 -1 選擇等於shared_buffers的 1/32
的尺寸(大約3%)
在每次事務提交時,WAL 緩衝區的內容被寫出到磁盤
wal_writer_delay (integer)指定 WAL 寫入器的活動輪次之間的延遲。在每一個輪次中寫入器會將 WAL 刷到磁盤。
以後,休眠wal_writer_delay毫秒,而後重複。默認值是 200 毫秒(200ms)。
commit_delay (integer)在一次 WAL 刷寫被髮起以前,commit_delay增長一個時間延遲,以微妙計。
commit_siblings (integer)在執行commit_delay延遲時,要求的併發活動事務的最小數目。
5.2. 檢查點
checkpoint_timeout (integer)
自動 WAL 檢查點之間的最長時間,以秒計。 有效值在30秒和1小時之間。 默認是5 分鐘(5min)。
增長這個參數的值會增長崩潰恢復所需的時間。
checkpoint_completion_target (floating point)
指定檢查點完成的目標,做爲檢查點之間總時間的一部分。默認是 0.5。
checkpoint_warning (integer)
若是因爲填充檢查點段文件致使的檢查點之間的間隔低於這個參數表示的秒數,默認值是 30 秒(30s)。零則關閉警告。
max_wal_size (integer)在自動WAL檢查點使得WAL增加到最大尺寸。這是軟限制;特殊狀況下WAL大
小 可 以 超 過 max_wal_size, 如 重 負 載 下 , 錯 誤archive_command, 或 者 較
大wal_keep_segments的設置。缺省是1GB。
min_wal_size (integer)只要WAL磁盤使用率低於這個設置,舊的WAL文件總數被回收,以供未來檢查點使用。缺省是80MB
5.3. 歸檔
archive_mode (enum)當啓用archive_mode時, 能夠經過設置archive_command命令將完成的 WAL段發送到
歸檔存儲。 除了off,要禁用兩種模式on和 always。
archive_command (string)本地 shell 命令被執行來歸檔一個完成的 WAL 文件段。字符串中的任何%p被替換成要被
歸檔的文件的路徑名,而%f只被文件名替換
archive_timeout (integer)強制服務器來週期性地切換到一個新的 WAL 段文件。
6. 複製
6.1. 發送服務器
max_wal_senders (integer)定來自後備服務器或流式基礎備份客戶端的併發鏈接的最大數量(即同時運行 WAL
發送進程 的最大數)。默認值是零,它意味着禁用複製。WAL 發送進程被計算在鏈接
總數內,所以該參數 不能被設置爲高於max_connections的值。
max_replication_slots (integer)指定服務器能夠支持的複製槽最大數量。默認值爲零。
要容許使用複製槽, wal_level必須被設置爲archive或 更高。
wal_keep_segments (integer)指定在後備服務器須要爲流複製獲取日誌段文件的狀況下,pg_xlog目錄下所能保留的
過去日誌文件段的最小數目。
wal_sender_timeout (integer)中斷那些中止活動超過指定毫秒數的複製鏈接。默認值是 60 秒。
track_commit_timestamp (bool)記錄事務提交時間。缺省值是off。
6.2. 主服務器
synchronous_standby_names (string)指定一個由逗號分隔的後備機名稱列表,這些後備機可以支持同步複製
在任何一個時刻,只能有最多一個活動的同步後備機;等待提交的事務只有在後備服務器確認收到了它們的數據以後才被容許繼續。
vacuum_defer_cleanup_age (integer)默認值是零個事務,表示死亡行版本將被儘量快地清除
6.3. 後備服務器
這些設置空值接收復制數據的一個後備服務器的行爲。它們的值與主服務器無關。
hot_standby (boolean)指定在恢復期間,你是否可以鏈接並運行查詢。默認值是off。
它只在歸檔恢復期間或後備機模式下才有效。
max_standby_archive_delay (integer)當熱後備機處於活動狀態時,這個參數決定取消那些與即將應用的 WAL 項衝突的後備
機查詢以前,後備服務器應該等待多久。當 WAL 數據被從 WAL歸檔(而且所以不是當前的 WAL)時,max_standby_archive_delay能夠應用。默認
值是 30 秒。若是沒有指定,衡量單位是毫秒。值 -1 容許後備機一直等到衝突查詢結束。
max_standby_streaming_delay (integer)當熱後備機處於活動狀態時,這個參數決定取消那些與即將應用的 WAL 項衝突的後
備機查詢以前,後備服務器應該等待多久
wal_receiver_status_interval (integer)指定在後備機上的 WAL 接收者進程向主服務器或上游後備機發送有關複製進度的信息
的最小頻度,默認值是 10 秒
hot_standby_feedback (boolean)指定一個熱後備機是否將會向主服務器或上游後備機發送有關於後備機上當前正被
執行的查詢的反饋。
wal_receiver_timeout (integer)停止處於非活動狀態超過指定毫秒數的複製連接。默認值是 60 秒。
wal_retrieve_retry_interval (integer)指定等待服務器應等待多長時間時,缺省值是5秒。若是沒有指定,單位是毫秒。
7. 查詢規劃
7.1. 規劃器方法配製
這些配置參數提供了影響查詢優化器選擇查詢規劃的原始方法。若是優化器 爲特定的查詢選
擇的缺省規劃並非最優,那麼咱們就能夠經過使用這些 配置參數強制優化器選擇一個更好
的規劃來temporary解決這個 問題。
若是優化器爲一個特定查詢選擇的默認計劃不是最優的,一種臨時解決方案是使用這些配置參數之一來強制優化
器選擇一個不一樣的計劃。提升優化器選擇的計劃質量的更好的方式包括調整規劃器的代價常
數、手工運行ANALYZE、增長default_statistics_target配置參數的值以及使
用ALTER TABLE SET STATISTICS增長爲特定列收集的統計信息量。
enable_bitmapscan (boolean)
容許或禁止查詢規劃器使用位圖掃描計劃類型。默認值是on。
enable_hashagg (boolean)
容許或禁用查詢規劃器使用哈希彙集計劃類型。默認值是on。
enable_hashjoin (boolean)
容許或禁止查詢規劃器使用哈希鏈接計劃類型。默認值是on。
enable_indexscan (boolean)
容許或禁止查詢規劃器使用索引掃描計劃類型。默認值是on。
enable_indexonlyscan (boolean)
容許或禁止查詢規劃器使用只用索引掃描計劃類型。默認值是on。
enable_material (boolean)
容許或者禁止查詢規劃器使用物化。它不可能徹底禁用物化,可是關閉這個變量將阻止
規劃器插入物化節點,除非爲了保證正確性。默認值是on。
enable_mergejoin (boolean)
容許或禁止查詢規劃器使用歸併鏈接計劃類型。默認值是on。
enable_nestloop (boolean)
容許或禁止查詢規劃器使用嵌套循環鏈接計劃。它不可能徹底禁止嵌套循環鏈接,可是
關閉這個變量將使得規劃器儘量優先使用其餘方法。默認值是on。
enable_seqscan (boolean)
容許或禁止查詢規劃器使用順序掃描計劃類型。它不可能徹底禁止順序掃描,可是關閉
這個變量將使得規劃器儘量優先使用其餘方法。默認值是on。
enable_sort (boolean)
容許或禁止查詢規劃器使用顯式排序步驟。它不可能徹底禁止顯式排序,可是關閉這個
變量將使得規劃器儘量優先使用其餘方法。默認值是on。
enable_tidscan (boolean)
容許或禁止查詢規劃器使用TID掃描計劃類型。默認值是on。
7.2. 規劃器代價常量
seq_page_cost (floating point)
設置規劃器計算一次順序磁盤頁面抓取的開銷。默認值是1.0。
random_page_cost (floating point)
設置規劃器對一次非順序獲取磁盤頁面的代價估計。默認值是 4.0。經過把表和索引
放在一個特殊的表空間(要設置該表空間的同名參數)中能夠覆蓋這個值
減小這個值(相對於seq_page_cost)將致使系統更傾向於索引掃描;提升它將讓索引
掃描看起來相對更昂貴。
如 果 你 相 信 90% 的 緩 衝 率 對 你 的 負 載 是 一 個 不 正 確 的 假 設 , 你 可 以 增 加
random_page_cost 來更好的反映隨機存儲讀取的真正代價。相應地,若是你的數據能夠
徹底放在高速緩存中(例如當數據庫小於服務器總內存時),下降 random_page_cost
多是合適的。
提示: 雖然容許你將random_page_cost設置的比 seq_page_cost小,可是物理上的實際狀況
並不受此影響。 然而當全部數據庫都位於內存中時,二者設置爲相等是很是合理的,由於
在此狀況下,亂序抓取並不比順序抓取開銷更大。
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)
設置規劃器對一個單一查詢可用的有效磁盤緩衝區尺寸的假設。
7.3. 遺傳查詢優化
GEQO是一個使用探索式搜索來執行查詢規劃的算法。它能夠下降負載查詢的規劃時間。 同
時,GEQO的檢索是隨機的,所以它的規劃可能會不可肯定。
geqo (boolean)允 許 或 禁 止 遺 傳 查 詢 優 化 。 默 認 是 啓 用 。 在 生 產 環 境 中 通 常 最 好 不 要 關 閉
它。geqo_threshold變量提供了對 GEQO 更細粒度的空值。
geqo_threshold (integer)
只有當涉及的FROM項數量至少有這麼多個的時候,才使用遺傳查詢優化(注意一個FULL
OUTER JOIN只被計爲一個FROM項)。默認值是 12。
geqo_effort (integer)
控制 GEQO 裏規劃時間和查詢規劃的有效性之間的平衡。這個變量必須是 一個範圍從 1到 10 的整數。缺省值是 5 。
geqo_pool_size (integer)
控制 GEQO 使用的池尺寸,它就是遺傳種羣中的個體數目。它必須至少爲 2,且有用的
值一般在 100 到 1000 之間。
geqo_generations (integer)
控制 GEQO 使用的子代數目。子代的意思是算法的迭代次數。它必須至少 是 1 ,有用
的值範圍和池大小相同。
geqo_selection_bias (floating point)
控制 GEQO 使用的選擇偏好。選擇偏好是種羣中的選擇壓力。值能夠是 1.5 到 2.0 之
間,後者是默認值。
geqo_seed (floating point)
控制 GEQO 使用的隨機數生成器的初始值,隨機數生成器用於在鏈接順序搜索空間中選
擇隨機路徑。該值能夠從 0 (默認值)到 1。
7.4. 其餘規劃器選項
default_statistics_target (integer)
爲沒有經過ALTER TABLE SET STATISTICS設置列相關目標的表列設置默認統計目標。默認值是100.
constraint_exclusion (enum)
constraint_exclusion的容許值是on(對全部表檢查約束)、off(從不檢查約束)
和partition(只對繼承的子表和UNION ALL子查詢檢查約束)。partition是默認設
置。它一般被用於繼承和分區表來提升性能。
當對一個特定表容許這個參數,規劃器比較查詢條件和表的CHECK約束,而且忽略那些
條件違反約束的表掃描。例如:
CREATE TABLE parent(key integer, ...);
CREATE TABLE child1000(check (key between 1000 and 1999)) INHERITS(parent);
CREATE TABLE child2000(check (key between 2000 and 2999)) INHERITS(parent);
SELECT * FROM parent WHERE key = 2400;
在啓用約束排除時,這個SELECT將徹底不會掃描child1000,從而提升性能。
目前,約束排除只在用來實現表分區的狀況中被默認啓用。爲全部表啓用它會增長額外
的規劃開銷,特別是在簡單查詢上而且不會產生任何好處。若是沒有分區表時,最好是
徹底關閉它。
cursor_tuple_fraction (floating point)
設置規劃器對將被檢索的一個遊標的行的比例的估計。默認值是 0.1。
from_collapse_limit (integer)
若是生成的FROM列表不超過這麼多項,規劃器將把子查詢融合到上層查詢。
join_collapse_limit (integer)
若是得出的列表中不超過這麼多項,那麼規劃器將把顯式JOIN(除了FULL JOIN)結構
重寫到 FROM項列表中。較小的值可減小規劃時間,可是可能會生成差些的查詢計劃。
默認狀況下,這個變量被設置成和from_collapse_limit相同, 這樣適合大多數使
用。把它設置爲 1 可避免任何顯式JOIN的重排序。所以查詢中指定的顯式鏈接順序就是
關係被鏈接的實際順序。
8. 錯誤報告和日誌
8.1. 在哪裏作日誌
log_destination (string)
PostgreSQL支持多種方法來記錄服務器消息,包括stderr、csvlog和syslog。在 Windows上還支持eventlog。
默認值是隻記錄到stderr。
若是csvlog被包括在log_destination中,日誌項會以「逗號分隔值」 (CSV)格式被輸
出,這樣能夠很方便地把日誌載入到程序中。
logging_collector (boolean)這個參數啓用日誌收集器,它是一個捕捉被髮送到stderr的日誌消息的後臺進程,而且
它會將這些消息重定向到日誌文件中。
log_directory (string)當logging_collector被啓用時,這個參數決定日誌文件將被在哪一個目錄下建立。它可
以被指定爲一個絕對路徑,也能夠被指定爲一個相對於集簇數據目錄的相對路徑。默認是pg_log
log_filename (string)當logging_collector被啓用時,這個參數設置被建立的日誌文件的文件名。該值被視
爲一種strftime模式,默認是postgresql-%Y-%m-%d_%H%M%S.log。
log_file_mode (integer)
在 Unix 系統上,當logging_collector被啓用時,這個參數設置日誌文件的權限
默認的權限是0600,表示只有服務器擁有者才能讀取或寫入日誌文件。其餘經常使用的設置
是0640,它容許擁有者的組成員讀取文件。
log_rotation_age (integer)當logging_collector被啓用時,這個參數決定一個個體日誌文件的最長生命期。當這
些分鐘過去後,一個新的日誌文件將被建立。
log_rotation_size (integer)當logging_collector被啓用時,這個參數決定一個個體日誌文件的最大尺寸。當這麼
多千字節被髮送到一個日誌文件後,將建立一個新的日誌文件。
log_truncate_on_rotation (boolean)
當logging_collector被 啓 用 時 , 這 個 參 數 將 導 致PostgreSQL截 斷 ( 覆 蓋 而
不是追加)任何已有的同名日誌文件。不過,截斷只在一個新文件因爲基於時
間的輪轉被打開時發生,在服務器啓動或基於尺寸的輪轉時不會發生。若是被
關閉,在全部狀況下之前存在的文件將被追加。
例 子 : 要 保 留 7 天 的 日 志 , 每 天 的 一 個 日 志 文 件 被 命 令
爲server_log.Mon、server_log.Tue等 等 , 並 且 自 動 用 本 周 的 日 志 覆 蓋
上 一 周 的 日 志 。 可 以 這 樣 作 : 將log_filename設 置 爲server_log.%a、
將log_truncate_on_rotation設置爲on而且將log_rotation_age設置爲1440。
例子:要保留 24 小時的日誌,每一個小時一個日誌文件,可是在日誌文件尺寸
超 過 1GB 時 輪 轉 。 可 以 這 樣 作 : 將log_filename設 置 爲server_log.%H%M、
將log_truncate_on_rotation設 置 爲on、 將log_rotation_age設 置 爲60並 且
將log_rotation_size設置爲1000000。 Including %M in 在log_filename中包括%M容許
發生任何尺寸驅動的輪轉來選擇一個不一樣於每一個小時的初始文件名的新文件名。
syslog_facility (enum)
當 啓 用 了 向syslog記錄時,這個 參 數 決 定 要 使 用 的syslog「設 備」。默認值是LOCAL0。
syslog_ident (string)
當啓用了向syslog記錄時,這個參數決定用來標識syslog中的PostgreSQL消息的程序名。默認值是postgres。
event_source (string)當啓用了向事件日誌記錄時,這個參數決定用來標識日誌中PostgreSQL消息的程序名。默認值是PostgreSQL。
8.2. 何時記錄日誌
client_min_messages (enum)控制被髮送給客戶端的消息級別。有效值是DEBUG五、 DEBUG四、DEBUG三、DEBUG二、
DEBUG一、LOG、NOTICE、 WARNING、ERROR、FATAL和PANIC。每一個級別都包括其後的全部級別。級別越靠後,被髮送的消息越少。默認值是NOTICE。注意LOG在這裏有
與log_min_messages中不一樣的排名。
log_min_messages (enum)控制哪些消息級別被寫入到服務器日誌。有效值是DEBUG五、DEBUG四、
DEBUG三、DEBUG二、DEBUG一、 INFO、NOTICE、WARNING、 ERROR、LOG、FATAL和PANIC。每一個級別都包括之後的全部級別。級別越靠後,被髮送的消息越少。默認值
是WARNING。注意LOG在這裏有與log_min_messages中不一樣的排名。只有超級用戶能夠改變這個設置。
log_min_error_statement (enum)控制哪些致使一個錯誤狀況的 SQL 語句被記錄在服務器日誌中,
默認值是ERROR,它表示致使錯誤、日誌消息、致命錯誤或恐慌錯誤的語句將被記錄在日誌中。
log_min_duration_statement (integer)若是語句運行至少指定的毫秒數,將致使記錄每個這種完成的語句的持續時間。
設置爲 -1 (默認值)將中止記錄語句持續時間。
注意: 當把這個選項和log_statement一塊兒使用時,已經被log_statement記錄的語句文本不
會在持續時間日誌消息中重複。若是你沒有使用syslog,咱們推薦你使用log_line_prefix記錄
PID 或會話 ID,這樣你可使用進程 ID 或會話 ID 把語句消息連接到後來的持續時間消息。python

消息嚴重級別
嚴重 性用法 syslog eventlog
DEBUG1..DEBUG5 爲開發者提供連續的更詳細的信息。DEBUG INFORMATION
INFO 提供用戶隱式要求的信息,例如來自VACUUMVERBOSE的輸出。INFO INFORMATION
NOTICE 提供可能對用戶有用的信息,例如長標識符截斷提示。NOTICE INFORMATION
WARNING 提供可能出現的問題的警告,例如在一個事務塊外COMMIT。NOTICE WARNING
ERROR 報告一個致使當前命令中斷的錯誤。WARNING ERROR
LOG 報告管理員可能感興趣的信息,例如檢查點活動。INFO INFORMATION
FATAL 報告一個致使當前會話中斷的錯誤。ERR ERROR
PANIC 報告一個致使全部數據庫會話中斷的錯誤。CRIT ERROR
8.3. 記錄什麼到日誌
application_name (string)一般由一個鏈接服務器後的的應用程序設置
debug_print_parse (boolean)
debug_print_rewritten (boolean)
debug_print_plan (boolean)這個參數啓用發出各類調試輸出。當設置時,會打印生成的解析樹, 查詢重
寫輸出,或執行的每一個查詢的執行計劃。這些信息是在LOG 信息級別發出,所以默認的,它們會出如今服務器日誌中,但不會發送給客戶端。
參數缺省是off。
debug_pretty_print (boolean) 被設置時,debug_pretty_print會縮進由debug_print_parse、debug_print_rewritten或 debug_print_plan
產生的輸出。這將致使比關閉參數時使用的「緊湊」模式可讀性更強可是更長的輸出。默認是打開的。
log_checkpoints (boolean)致使檢查點和重啓點被記錄在服務器日誌中。默認值是關閉。
log_connections (boolean)致使每一次嘗試對服務器的鏈接被記錄,客戶端認證的成功完成也會被記錄。缺省是off。
注意: 某些客戶端程序(例如psql)在要求密碼時會嘗試鏈接兩次,所以重複的「收到鏈接」消
息並不必定表示一個錯誤。
log_disconnections (boolean)記錄會話終止緣由。日誌輸出提供信息相似於log_connections, 以及會話持續時間。缺省是off。
log_duration (boolean)致使每個完成的語句的持續時間被記錄。默認值是off。
log_error_verbosity (enum)控制爲每個被記錄的消息要寫入到服務器日誌的細節量。有效值
是TERSE、DEFAULT和VERBOSE,每個都爲顯示的消息增長更多域。
log_hostname (boolean)默認狀況下,鏈接日誌消息只顯示鏈接主機的 IP 地址。
log_line_prefix (string)一個printf風格的字符串,它在每一個日誌行的開頭輸出。%字符開始「轉義序列」,它將被按照下文描述的替換成狀態信息。
轉義 效果 只限會話
%a 應用名 是
%u 用戶名 是
%d 數據庫名 是
%r 遠程主機名或 IP 地址,以及遠程端口是
%h 遠程主機名或 IP 地址 是
%p 進程 ID 否
%t 無毫秒的時間戳 否
%m 帶毫秒的時間戳 否
%i 命令標籤:會話當前命令的類型是
%e SQLSTATE 錯誤代碼 否
%c 會話 ID:見下文 否
%l 對每一個會話或進程的日誌行號,從 1 開始否
%s 進程開始的時間戳 否
%v 虛擬事務 ID(backendID/localXID)否
%x 事務 ID (若是未分配則爲0)否
%q 不產生輸出,可是告訴非會話進程在字符串的這一點中止;會話進程忽略否
%% 純文字 % 否
log_lock_waits (boolean)控制當一個會話爲得到一個鎖等到超過deadlock_timeout時,是否要產生一個日誌消息。默認值是off
log_statement (enum)控制哪些SQL語句被記錄。有效值是none(off)、ddl、mod和 all(所 有 語句)。
ddl記錄全部數據定義語句,例如CREATE、ALTER和 DROP語句。mod記錄全部ddl語 句 , 外 加 數 據 修 改 語 句 例 如INSERT, UPDATE、DELETE、TRUNCATE, 和COPY
FROM。若是PREPARE、EXECUTE和 EXPLAIN ANALYZE包含合適類型的命令,它們也會被記錄。默認值是none。
注意: 即便設置了log_statement=all,包含 簡單語法錯誤的語句也不會被記錄。
由於僅在完成基本的語法分析並 肯定了語句類型以後才記錄日誌。
log_replication_commands (boolean)致使每一個複製命令記錄在服務器日誌中。缺省值是off。
log_temp_files (integer)控制記錄臨時文件名和尺寸。臨時文件能夠被建立用來排序、哈希和存儲臨時查詢結果。
當每個臨時文件被刪除時都會製做一個日誌項。一個零值記錄全部臨時文件信息,默認設置爲 -1,它禁用這種記錄。
log_timezone (string)設置在服務器日誌中寫入的時間戳的時區。和TimeZone不一樣,這個值是集簇範圍的,所以全部會話將報告一致的時間戳。
內建默認值是GMT,可是一般會被在postgresql.conf中覆蓋。
8.4. 使用CSV 格式的日誌輸出
包括在log_destination中的csvlog,提供了一個 便捷的方式向數據庫中導入日誌文件。
(CSV)格式的日誌行,包括這些列: 帶毫秒的時間戳、 用戶名、 數據庫名、 進程 ID、
客戶端主機:端口號、 會話 ID、 每一個會話的行號、 命令標籤、 會話開始時間、 虛擬事務
ID、 普通事務 ID、 錯誤嚴重性、 SQLSTATE 代碼、 錯誤消息、 錯誤消息詳情、 提示、
致使錯誤的內部查詢(若是有)、 錯誤位置所在的字符計數、 錯誤上下文、 致使錯誤的
用戶查詢(若是有且被log_min_error_statement啓用)、 錯誤位置所在的字符計數、 在
PostgreSQL 源代碼中錯誤的位置(若是log_error_verbosity被設置爲verbose)以及應用
名。
下面是一個定義用來存儲 CSV 格式日誌輸出的樣表:
CREATE TABLE postgres_log
(
log_time timestamp(3) with time zone,
user_name text,
database_name text,
process_id integer,
connection_from text,
session_id text,
session_line_num bigint,
command_tag text,
session_start_time timestamp with time zone,
virtual_transaction_id text,
transaction_id bigint,
error_severity text,
sql_state_code text,
message text,
detail text,
hint text,
internal_query text,
internal_query_pos integer,
context text,
query text,
query_pos integer,
location text,
application_name text,
PRIMARY KEY (session_id, session_line_num)
);
使用COPY FROM命令將一個日誌文件導入到這個表中
COPY postgres_log FROM ’/full/path/to/logfile.csv’ WITH csv;
8.5. 進程標題
這些設置控制進程標題如ps是如何被修改的
cluster_name (string)設置出如今集羣中的全部進程標題中的集羣名稱。
update_process_title (boolean)啓用更新進程標題的特性,這個特性在每次服務器接收到一個新SQL命令時都會更新進
程的標題。
9. 運行時統計數據
9.1. 查詢和索引統計收集器
這些參數控制服務器範圍的統計數據收集特性。當統計收集被啓用時,被產生的數據能夠經過pg_stat和pg_statio系統視圖族訪問。
track_activities (boolean)啓用對每一個會話的當前執行命令的信息收集,還有命令開始執行的時間。
默認爲打開。注意即便被啓用,這些信息也不是對全部用戶可見,只有超級用戶和擁有報告信息的會話的用戶可見,
track_activity_query_size (integer)指定跟蹤每一個活動會話當前執行命令所保留的字節數,默認值是 1024。
track_counts (boolean)啓用在數據庫活動上的統計收集。默認打開,由於自動清理守護進程須要被收集的信息。
track_io_timing (boolean)啓用對系統 I/O 調用的計時。默認關閉,
由於它將重複地向操做系統查詢當前時間,這會在某些平臺上致使顯著的負荷。
track_functions (enum)啓用跟蹤函數調用計數和用時。
指定pl只跟蹤過程語言函數,指定all還會跟蹤 SQL 和C 語言函數。默認值是none,它禁用函數統計跟蹤。
stats_temp_directory (string)設置存儲臨時統計數據的目錄。默認值是pg_stat_tmp。
9.2. 統計監控
log_statement_stats (boolean)
log_parser_stats (boolean)
log_planner_stats (boolean)
log_executor_stats (boolean)
對每一個查詢,向服務器日誌裏輸出相應模塊的性能統計。
10. 自動清理
這些設置控制自動清理特性的行爲。
autovacuum (boolean)控制服務器是否運行自動清理啓動器後臺進程。默認爲開啓,不過要自動清理正常工做還須要啓用track_counts。
autovacuum_naptime (integer)指定自動清理在任意給定數據庫上運行的最小延遲。
在每一輪中後臺進程檢查數據庫並根據須要爲數據庫中的表發出VACUUM和ANALYZE命令。默認值爲1分鐘
autovacuum_vacuum_threshold (integer)指定能在一個表上觸發VACUUM的被插入、被更新或被刪除元組的最小數量。默認值爲50個元組。
autovacuum_analyze_threshold (integer)指定能在一個表上觸發ANALYZE的被插入、被更新或被刪除元組的最小數量。默認值爲50個元組。
autovacuum_vacuum_scale_factor (floating point)
指定一個表尺寸的分數,在決定是否觸發VACUUM時將它加到autovacuum_vacuum_threshold上。默認值爲0.2(表尺寸的20%)。
autovacuum_analyze_scale_factor (floating point)
指定一個表尺寸的分數,在決定是否觸發ANALYZE時將它加到autovacuum_analyze_threshold上。默認值爲0.1(表尺寸的10%)。
autovacuum_freeze_max_age (integer)
指 定 在 一 個VACUUM操 做 被 強 制 執 行 來 防 止 表 中事務ID回捲以前,一個表的pg_class.relfrozenxid域能保持的最大年齡(事務的)。
autovacuum_multixact_freeze_max_age (integer)指 定 在 一 個VACUUM操 做 被 強 制 執 行 來 防 止 表 中多事務ID回捲以前,一個表
的pg_class.relminmxid域能保持的最大年齡(多事務的)。
autovacuum_vacuum_cost_delay (integer)指定用於自動VACUUM操做中的代價延遲值。若是指定-1(默認值 ,
則使用vacuum_cost_delay值。默認值爲20毫秒。
autovacuum_vacuum_cost_limit (integer)指定用於自動VACUUM操做中的代價限制值。若是指定-1(默認值),則使用vacuum_cost_limit值。
11. 客戶端鏈接默認值
11.1. 語句行爲
search_path (string)指定當一個對象(表、數據類型、函數等)被用一個無模式限定的簡單名稱引
用時,用於進行搜索該對象的模式順序。search_path的值必需是一個逗號分隔的模式名列表。
row_security (boolean)控制是否提升錯誤以代替應用行安全策略。當設置爲on時,策略每每適用。當
設置爲off時,查詢失敗,這將應用至少一個策略。默認爲on。
default_tablespace (string)指定當一個CREATE命令沒有顯式指定一個表空間時,建立對象(表和索引)的默認表空間。
temp_tablespaces (string)指定當一個CREATE命令沒有顯式指定一個表空間時,建立臨時對象(臨時表和臨時表上的索引)的默認表空間。
check_function_bodies (boolean)
一般爲打開 。當設置爲off時,它禁用CREATE FUNCTION期間對函數體字符串的驗證。
禁用驗證避免了驗證處理的反作用而且避免瞭如向前引用致使的僞確定。在
表明其餘用戶載入函數以前設置這個參數爲off;pg_dump會自動這樣作。
default_transaction_isolation (enum)每一個 SQL 事務都有一個隔離級別,能夠是「讀未提交」、「讀已提交」、「可重複讀」或
者「可序列化」。這個參數控制每一個新事務的默認隔離級別。默認是「讀已提交」。
default_transaction_read_only (boolean)一個只讀的 SQL 事務不能修改非臨時表。
控制每一個新事務的默認只讀狀態 。默認是off(讀/寫)。
default_transaction_deferrable (boolean)控制每一個新事務的默承認延遲狀態。默認值是off。
session_replication_role (enum)爲當前會話控制複製相關的觸發器和規則的觸發。
可能的值有origin(默認)、replica和local。
statement_timeout (integer)停止任何使用了超過指定毫秒數的語句,從命令到達服務器開始計時。默認爲0.
不推薦在postgresql.conf中設置statement_timeout,由於它會影響全部會話。
lock_timeout (integer)任何語句在試圖獲取表、索引、行或其餘數據庫對象上的鎖時等到超過指定的毫秒數,該語句將被停止。
該時間限制獨立地應用於每一次鎖獲取嘗試。該限制會應用到顯式鎖定請求(如LOCK TABLE或不帶NOWAIT的SELECT FOR UPDATE without NOWAIT)和
隱式得到的鎖。一個零值(默認)將關閉這個參數。
與statement_timeout不一樣,這個超時只在等待鎖時發生。注意若是statement_timeout爲非零,設置lock_timeout爲相同或更大的值沒有意義,由於
事務超時將老是第一個被觸發。
不推薦在postgresql.conf中設置lock_timeout,由於它會影響全部會話。
vacuum_freeze_table_age (integer)當表的pg_class.relfrozenxid域達到該設置指定的年齡時,VACUUM會執行一次全表掃
描。默認值是 1.5 億個事務。
vacuum_freeze_min_age (integer)指定VACUUM在掃描表時用來決定是否凍結行版本的切斷年齡(以事務計)。默認值是 5
千萬個事務。
vacuum_multixact_freeze_table_age (integer)若是表的pg_class.relminmxid域超過了這個設置指定的年齡,VACUUM會執行一次
全表掃描。默認值是 1.5 億個組合事務。
vacuum_multixact_freeze_min_age (integer)指定VACUUM在掃描表時用來決定是否把組合事務 ID 替換爲一個更新的事務 ID
或組合事務 ID 的切斷年齡(以組合事務計)。默認值是 5 千萬個組合事務。
bytea_output (enum)設置bytea類型值的輸出格式。有效值是hex(默認)和 escape(傳統的 PostgreSQL格式)。
xmlbinary (enum)設置二進制值如何被編碼爲XML。
xmloption (enum)當在XML和字符串值之間進行轉換時,不管設置DOCUMENT或 CONTENT都是隱式的。
gin_pending_list_limit (integer)當啓用fastupdate時,設置正在使用的GIN掛起列表的最大尺寸。
11.2. 區域和格式化
DateStyle (string)設置日期和時間值的顯示格式,以及解釋有歧義的日期輸入值的規則。
輸出格式聲明(ISO、Postgres、SQL或German)、 輸入/輸出的年/月/日順序(DMY、MDY或YMD)
IntervalStyle (enum)設置間隔值的顯示格式。值sql_standard將產生匹配 SQL 標準間隔文本的輸出。
當DateStyle參數被設置爲ISO時,值postgres(默認)將產生匹配PostgreSQL發行 8.4以前的輸出。
當DateStyle參數被設置爲非ISO輸出時,值postgres_verbose會產生匹配PostgreSQL發行 8.4 以前的輸出。
TimeZone (string)設置用於顯示和解釋時間戳的時區。內建默認值是GMT,可是它一般會在postgresql.conf中被覆蓋
timezone_abbreviations (string)設置服務器接受的日期時間輸入中使用的時區縮寫集合。默認值爲’Default’
extra_float_digits (integer)這個參數爲浮點值調整顯示的位數,包括float四、float8以及幾何數據類型。
client_encoding (string)設置客戶端編碼(字符集)。默認使用數據庫編碼
lc_messages (string)設置消息顯示的語言。可接受的值是系統相關的
lc_monetary (string)設置用於格式化貨幣量的區域,例如用to_char函數族
lc_numeric (string)設置用於格式化數字的區域,例如用to_char函數族。
lc_time (string)設置用於格式化日期和時間的區域,例如用to_char函數族。
default_text_search_config (string)選擇被那些沒有顯式參數指定配置的文本搜索函數變體使用的文本搜索配置。
11.3. 共享庫預載入
爲了載入附加的功能或者達到提升性能的目的,可用多個設置來預先載入共享庫到服務器中
例如’$libdir/mylib’設置可能會致使mylib.so(或者某些平臺上的mylib.sl)從安裝的標準庫目錄被預裝載。
一般是使用’$libdir/plXXX’語法,其中的XXX是pgsql、perl、tcl或python。
local_preload_libraries (string)指定一個或者多個要在鏈接開始時預載入的共享庫。
session_preload_libraries (string)指定一個或者多個要在鏈接開始時預載入的共享庫。
shared_preload_libraries (string)指定一個或者多個要在服務器啓動時預載入的共享庫。
11.4. 其餘默認值
dynamic_library_path (string)若是須要打開一個能夠動態裝載的模塊而且在CREATE FUNCTION或LOAD命令中指定的文
件名沒有目錄部分(即名字中不包含斜線),那麼系統將搜索這個路徑以查找所需的文件。
必須是一個冒號分隔
dynamic_library_path = ’/usr/local/lib/postgresql:/home/my_project/lib:$libdir’
gin_fuzzy_search_limit (integer)GIN 索引返回的集合尺寸的軟上限。
12. 鎖管理
deadlock_timeout (integer)進行死鎖檢測以前在一個鎖上等待的總時間(以毫秒計),默認是 1 秒(1s)
當log_lock_waits被設置時,這個參數還能夠決定發出關於鎖等待的日誌以前等待的時長。
max_locks_per_transaction (integer)共享鎖表跟蹤在max_locks_per_transaction*(max_connections+max_prepared_transactions) 個對象(如表)上的鎖。
所以,在任何一個時刻,只有不超過這麼多個可區分對象可以被鎖住。
這個參數控制爲每一個事務分配的對象鎖的平均數量。
max_pred_locks_per_transaction (integer)共享謂詞鎖表跟蹤
13. 版本和平臺兼容性
13.1. 之前的PostgreSQL 版本
array_nulls (boolean)控制數組輸入解析器是否把未用引號的NULL識別爲一個空數組元素。默認爲on
backslash_quote (enum)參數控制字符串文本中的單引號是否可以用\’來表示。
default_with_oids (boolean)控制CREATE TABLE和CREATE TABLE AS在既沒有指定WITH OIDS也沒有指
定WITHOUT OIDS的狀況下,是否在新建立的表中包含 OID 列。
它還決定被SELECTINTO建立的表裏面是否包含 OID 。這個參數在默認狀況下爲off。在PostgreSQL 8.0 及
更早的版本中,它默認爲on。
咱們反對在用戶表中使用 OID ,所以大多數安裝應該禁用這個變量
escape_string_warning (boolean)
打 開 時 , 如 果 在 普 通 字 符 串 文 本 中 (’...’語 法 ) 出 現 了 一 個 反 斜 線 (\) 並
且standard_conforming_strings爲關閉,那麼就會發出一個警告。默認值是on。
lo_compat_privileges (boolean)
在9.0以前的版本中,大對象沒有鏈接權限,而且對全部用戶哦都市可讀可寫的。
將這個變量設置爲on,從而禁用新的權限檢查,以與之前的版本兼容。 默認是off。
operator_precedence_warning (boolean)當開啓時,解析器爲了可能修改的任何結構發出警告, 意味着PostgreSQL 9.4操做符優
先級中做爲修改結果。 對審計應用程序是很是有用的,缺省off。
quote_all_identifiers (boolean)當數據庫產生 SQL 時,強制全部標識符被引號包圍,即便它們(當前)不是關鍵字 。
sql_inheritance (boolean)控制未修飾的表引用是否被視做要包括繼承的子表。默認值是on
standard_conforming_strings (boolean)控制普通字符串文本(’...’)是否按照 SQL 標準把反斜線當普通文本。默認值爲on
synchronize_seqscans (boolean)它容許對大型表的順序掃描與其餘掃描同步,所以併發掃描能夠在幾乎相同的時刻讀取
相同的塊,這樣能夠分擔 I/O 負載。
13.2. 平臺和客戶端兼容性
transform_null_equals (boolean)當打開時,形爲expr = NULL(或NULL = expr)的表達式將被當作expr IS NULL也
就是說,若是expr得出空值值則返回真,不然返回假。正確的 SQL 標準兼容的expr =
NULL行爲老是返回空(未知)。所以這個參數默認爲off。
14. 錯誤處理
exit_on_error (boolean)若是爲真,任何錯誤將停止當前會話。默認狀況下,這個值被設置爲假,這樣只有
FATAL 錯誤(致命)將停止會話。
restart_after_crash (boolean)當被設置爲真(默認值)時,PostgreSQL將在一次後端崩潰後自動從新初始化。
15. 預置選項
下列「參數」是隻讀的,它們是在編譯或安裝PostgreSQL時決定的。
block_size (integer)報告一個磁盤塊的大小。默認值是 8192 字節。
data_checksums (boolean)報告對這個集簇是否啓用了數據校驗碼。
debug_assertions (boolean)報告是否啓用斷言編譯PostgreSQL。
integer_datetimes (boolean)報告PostgreSQL是否在編譯時打開了 64 位整很多天期和時間。默認值是on。
lc_collate (string)報告文本數據排序使用的區域。
lc_ctype (string)報告決定字符分類的區域。
max_function_args (integer)報告函數參數的最大數量。默認值是100 個參數。
max_identifier_length (integer)報告標識符的最大長度。默認值是 64
max_index_keys (integer)報告索引鍵的最大數目。默認值是 32 個
segment_size (integer)報告一個文件段中能夠存儲的塊(頁)的數量。默認是1GB。
server_encoding (string)報告數據庫的編碼(字符集)一般,客戶端只須要關心client_encoding的值。
server_version (string)報告服務器版本數值。
server_version_num (integer)報告服務器版本數值的整數值
wal_block_size (integer)報告一個 WAL 磁盤塊的尺寸
wal_segment_size (integer)報 告 WAL 段 文 件 中 的 塊 ( 頁 ) 數 。
16. 自定義選項
這個特性被設計用來由附加模塊向PostgreSQL添加一般不爲系統知道的參數(例如過程語
言)。這容許使用標準方法配製擴展模塊。
17. 開發者選項
下面的參數目的是用在PostgreSQL源代碼上, 而且在某些狀況下能夠幫助恢復嚴重損壞了的
數據庫。在一個生產數據庫中沒有理由使用它們。
allow_system_table_mods (boolean)
容許對系統表結構的修改。它能夠被initdb使用。這個參數只能在服務器啓動時設置。
ignore_system_indexes (boolean)讀取系統表時忽略系統索引(可是修改系統表時依然同時更新索引)。
post_auth_delay (integer)
pre_auth_delay (integer)
trace_notify (boolean)
trace_recovery_messages (enum)
trace_sort (boolean)
trace_locks (boolean)
trace_lwlocks (boolean)
trace_userlocks (boolean)
trace_lock_oidmin (integer)
trace_lock_table (integer)
debug_deadlocks (boolean)
log_btree_build_stats (boolean)
wal_debug (boolean)
ignore_checksum_failure (boolean)
zero_damaged_pages (boolean)
8. 短選項
爲了方便起見,系統中還爲一些參數提供了單字母的命令行選項開關。
短選項 等效於
-B x shared_buffers = x
-d x log_min_messages = DEBUGx
-e datestyle = euro
-fb, -fh, -fi, -fm, -fn, -fo, -fs, -ft enable_bitmapscan = off,
enable_hashjoin = off,
enable_indexscan = off,
enable_mergejoin = off,
enable_nestloop = off,
enable_indexonlyscan = off,
enable_seqscan = off, enable_tidscan
= off
-F fsync = off
-h x listen_addresses = x
-i listen_addresses = ’*’
-k x unix_socket_directories = x
-l ssl = on
-N x max_connections = x
-O allow_system_table_mods = on
-p x port = x
-P ignore_system_indexes = on
-s log_statement_stats = on
-S x work_mem = x
-tpa, -tpl, -te log_parser_stats = on,
log_planner_stats = on,
log_executor_stats = on
-W x post_auth_delay = xgit

相關文章
相關標籤/搜索