【PG體系結構】Postgresql 配置檔案詳解
選項 | 預設值 | 說明 | 是否最佳化 | 原因 |
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,提高效能 |
listen_addresses (string)
這個引數只有在啟動資料庫時,才能被設定。它指定資料庫用來監聽客戶端連線的TCP/IP地址。預設是值是* ,表示資料庫在啟動以後將在執行資料的機器上的所有的IP地址上監聽使用者請求(如果機器只有一個網路卡,只有一個IP地址,有多個網路卡的機器有多個 IP地址)。可以寫成機器的名字,也可以寫成IP地址,不同的值用逗號分開,例如,’server01’, ’140.87.171.49, 140.87.171.21’。如果被設成localhost,表示資料庫只能接受本地的客戶端連線請求,不能接受遠端的客戶端連線請求。
port (integer)
authentication_timeout (integer)
ssl (boolean)
ssl_ciphers (string)
shared_buffers (integer)
這個引數只有在啟動資料庫時,才能被設定。它表示資料緩衝區中的資料塊的個數,每個資料塊的大小是8KB。資料緩衝區位於資料庫的共享記憶體中,它越大越好,不能小於128KB。預設值是128MB。
temp_buffers (integer)
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)
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)
max_files_per_process (integer)
這個引數只有在啟動資料庫時,才能被設定。他設定每個資料庫程式能夠開啟的檔案的數目。預設值是1000。
shared_preload_libraries (string)
執行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_page_dirty (integer)
這個引數可以在任何時候被設定。預設值是20。如果清理修改一個原先是乾淨的塊的預計開銷。它需要一個把髒的磁碟塊再次沖刷到磁碟上的額外開銷。
vacuum_cost_limit (integer)
bgwriter_delay (integer)
bgwriter_lru_maxpages (integer)
bgwriter_lru_multiplier (floating point)
full_page_writes (boolean)
這個引數只能在postgresql.conf檔案中被設定。預設值是on。開啟這個引數,可以提高資料庫的可靠性,減少資料丟失的機率,但是會產生過多的事務日誌,降低資料庫的效能。 即 伺服器在checkpoint之後在對頁面的第一次寫時將整個頁面寫到wal裡面。
commit_delay (integer)
這個引數可以在任何時候被設定。它設定事務在發出提交命令以後的睡眠時間,只有在睡眠了commit_delay指定的時間以後,事務產生的事務日誌才會被寫到事務日誌檔案中,事務才能真正地提交。增大這個引數會增加使用者的等待時間,但是可以讓多個事務被同時提交,提高系統的效能。如果資料庫中的負載比較高,而且大部分事務都是更新型別的事務,可以考慮增大這個引數的值。下面的引數commit_siblings會影響commit_delay是否生效。預設值是0,單位是微秒(microsecond)。0表示無延遲。即 向WAL緩衝區寫入記錄和將緩衝區重新整理到磁碟上之間的時間延遲。
commit_siblings (integer)
這個引數只能在postgresql.conf檔案中被設定。單位是秒,預設值是300。它影響系統何時啟動一個檢查點操作。如果現在的時間減去上次檢查點操作結束的時間超過了checkpoint_timeout的值,系統就會自動啟動一個檢查點操作。增大這個引數會增加資料庫崩潰以後恢復操作需要的時間。即 最大多長時間發生一次checkpoint
checkpoint_completion_target (floating point)
archive_mode (boolean)
這個引數只有在啟動資料庫時,才能被設定。預設值是off。它決定資料庫是否開啟歸檔模式。
archive_dir (string)
這個引數只有在啟動資料庫時,才能被設定。預設值是空串。它設定存放歸檔事務日誌檔案的目錄。
archive_timeout (integer)
最佳化器用一個正的浮點數來表示不同的查詢計劃的執行成本,每個基本的資料庫操作都會被賦給一個確定的成本常量,最佳化器根據每個基本操作的執行成本來計算每個查詢計劃的執行成本。不要輕易地改變下面的引數的值,使用它們的預設值即可。
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)
下列引數控制最佳化器使用的遺傳演算法。除非對遺傳演算法特別瞭解,一般情況下,使用它們預設值即可。
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)
default_statistics_target (integer)
設定預設的收集最佳化器統計資料的目標值。它的值越大,ANALYZE操作的執行的時間越長,掃描的資料行的個數也就越多,得到的最佳化器統計資料就越準確。也可以使用命令ALTER TABLE ... ALTER COLUMN ... SET STATISTICS來為表的每個列設定一個單獨的統計資料目標值,這個值的作用與引數default_statistics_target是一樣,它隻影響相關的列的統計資料收集過程。預設值是10。
constraint_exclusion (boolean)
這個引數只能在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。
控制傳送給客戶端的訊息級別。合法的取值是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)
訊息嚴重級別
嚴重級別
用法
DEBUG1..DEBUG5
報告詳細的除錯資訊。
INFO
報告使用者可能需要的資訊。
NOTICE
報告對使用者有用的資訊。
WARNING
報告警告資訊。
ERROR
報告錯誤資訊。
LOG
報告對資料庫管理員有用的資訊, 例如,檢查點操作統計資訊。
FATAL
報告導致當前會話被終止的錯誤資訊。
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)
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)
是否收集每個會話的當前正在執行的命令的統計資料,包括命令開始執行的時間。預設值是on。只有超級使用者才能修改這個引數。
track_counts (boolean)
log_parser_stats (boolean)
log_planner_stats (boolean)
log_executor_stats (boolean)
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)
deadlock_timeout(integer)
設定死鎖超時檢測時間。單位是微秒,預設值是1000。死鎖檢測是一個消耗許多 CPU資源的操作。這個引數的值不能太小。在資料庫負載比較大的情況下,應當增大這個引數的值。
max_locks_per_transaction(integer)
轉自:https://www.cnblogs.com/zhaowenzhong/p/5667434.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29487349/viewspace-2374748/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PostgreSQL-PG體系結構之WAL(五)SQL
- 【PG體系結構】PG體系結構簡單說明
- Nginx目錄結構與配置檔案詳解Nginx
- MachO 檔案結構詳解Mac
- PostgreSQL-訪問策略配置檔案pg_hba.conf檔案(八)SQL
- Java Servlet詳解(體系結構+註解配置+生命週期)JavaServlet
- 位元組碼檔案結構詳解
- PostgreSQL體系結構概述SQL
- PostgreSQL DBA(15) - WAL檔案結構SQL
- haproxy配置檔案詳解
- redis配置檔案詳解Redis
- redis 配置檔案詳解Redis
- PostgreSQL-PG的體系架構之記憶體管理(三)SQL架構記憶體
- git config配置檔案詳解Git
- Nginx的配置檔案詳解Nginx
- influx詳解(二):配置檔案UX
- vim的配置檔案詳解
- Docker Compose 配置檔案詳解Docker
- Linux可執行檔案格式-ELF結構詳解Linux
- Postgresql資料庫體系結構-程式和記憶體結構SQL資料庫記憶體
- nginx.conf 配置檔案詳解Nginx
- MyBatis--主配置檔案詳解MyBatis
- Nginx 配置檔案引數詳解Nginx
- Tomcat 的 Server 檔案配置詳解!!!TomcatServer
- Python之ini配置檔案詳解Python
- linux網路卡配置檔案詳解Linux
- 屬性配置檔案詳解(2)
- linux的啟動配置檔案inittab檔案詳解Linux
- Tungsten Fabric架構解析丨詳解vRouter體系結構架構VR
- Mysql配置檔案my.ini配置項詳解MySql
- MyBatis 核心配置檔案詳細內容詳解MyBatis
- Linux 檔案系統詳解Linux
- Linux檔案系統詳解Linux
- MySQL 配置檔案 (my.ini) 詳解MySql
- PHP配置檔案詳解php.iniPHP
- 檔案系統(五):exFAT 檔案系統原理詳解
- postgresql物理備份工具pg_rman的使用詳解SQL
- 分散式檔案儲存FastDFS(七)FastDFS配置檔案詳解分散式AST