shared_buffers (integer)
設置數據庫服務器將使用的共享內存緩沖區量。默認通常是128 兆字節(128MB),但是如果你的內核設置不支持(在initdb時決定),那么可以會更少。這個設置必須至少為 128 千字節(BLCKSZ的非默認值將改變最小值)。不過為了更好的性能,通常會使用明顯高于最小值的設置。如果有一個專用的 1GB 或更多內存的數據庫服務器,一個合理的shared_buffers開始值是系統內存的 25%。即使較大的shared_buffers有效,也會造成一些工作負載,但因為TeleDB同樣依賴操作系統的高速緩沖區,將shared_buffers設置為超過 40% 的RAM不太可能比一個小點值工作得更好。為了能把對寫大量新的或改變的數據的處理分布在一個較長的時間段內,shared_buffers更大的設置通常要求對max_wal_size也做相應增加。如果系統內存小于 1GB,一個較小的 RAM 百分數是合適的,這樣可以為操作系統留下足夠的空間。
huge_pages (enum)
啟用/禁用巨型內存頁面的使用。可用的值是 try(默認)、on、和off。當前,只有 Linux 上支持這個特性。在其他系統上這個參數被設置為try時,它會被忽略。巨型頁面的使用會導致更小的頁面表以及花費在內存管理上的 CPU 時間更少,從而提高性能。 當huge_pages被設置為try時,服務器將 嘗試使用巨型頁面,如果失敗則會轉回去使用正常的分配。如果設置為 on,使用巨型頁面失敗會阻止服務器啟動。如果設置為 off,則不會使用巨型頁面。
temp_buffers (integer)
設置每個數據庫會話使用的臨時緩沖區的最大數目。這些都是會話的本地緩沖區,只用于訪問臨時表。默認是8 兆字節(8MB)。這個設置可以在獨立的會話內部被改變,但是只有在會話第一次使用臨時表之前才能改變; 在會話中隨后企圖改變該值是無效的。一個會話將按照temp_buffers給出的限制根據需要分配臨時緩沖區。如果在一個并不需要大量臨時緩沖區的會話里設置一個大的數值, 其開銷只是一個緩沖區描述符,或者說temp_buffers每增加一則增加大概 64 字節。不過,如果一個緩沖區被實際使用,那么它就會額外消耗 8192 字節(或者BLCKSZ字節)。
max_prepared_transactions (integer)
設置可以同時處于“prepared”狀態的事務的最大數目(見PREPARE TRANSACTION)。把這個參數設置 為零(這是默認設置)將禁用預備事務特性。這個參數只能在服務器啟動時設置。如果你不打算使用預備事務,可以把這個參數設置為零來防止意外創建預備事務。如果你正在使用預備事務,你將希望把max_prepared_transactions至少設置為max_connections一樣大,因此每一個會話可以有一個預備事務待處理。當運行一個后備服務器時,這個參數必須至少與主服務器上的一樣大。否則,后備服務器上將不會執行查詢。
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 可能會對控制這種情況有所幫助。
replacement_sort_tuples (integer)
當要被排序的元組數比這個數字小時,排序將會使用替換選擇而不是快速排序來產生其第一個輸出。在內存受限的環境中這可能會有用,這種環境中被輸入到大型排序操作中的元組具有很強的物理邏輯關聯。注意,這不包括具有逆相關的輸入元組。替換選擇算法可能會產生一次不需要合并的長時間運行,其中使用默認策略會導致很多次運行并且必須被合并來產生最終的有序輸出。這可以允許排序操作更快完成。默認是150,000 個元組。注意,更高的值通常不會更有效,并且可能產生反效果,因為優先隊列對于可用的 CPU 高速緩存的尺寸很敏感,然而默認策略會使用一種高速緩存透明算法運行。這種性質允許默認的排序策略自動且透明地利用可用的 CPU 高速緩存。把maintenance_work_mem設置為其默認值通常會阻止工具命令外部排序(例如CREATE INDEX用來構建 B-樹索引的排序)使用替換選擇排序,除非外部元組非常寬。
autovacuum_work_mem (integer)
指定每個自動清理工作者進程能使用的最大內存量。其默認值為-1,表示轉而使用 maintenance_work_mem的值。當運行在其他上下文環境中時,這個設置對VACUUM的行為沒有影響。
max_stack_depth (integer)
指定服務器的執行堆棧的最大安全深度。這個參數的理想設置是由內核強制的實際棧尺寸限制(ulimit -s所設置的或者本地等價物),減去大約一兆字節的安全邊緣。需要這個安全邊緣是因為在服務器中并非所有例程都檢查棧深度,只是在關鍵的可能遞規的例程(例如表達式計算)中才進行檢查。默認設置是兩兆字節(2MB),這個值相對比較小并且不可能導致崩潰。但是,這個值可能太小了,以至于無法執行復雜的函數。只有超級用戶可以修改這個設置。把max_stack_depth參數設置得高于實際的內核限制將意味著一個失控的遞歸函數可能會導致一個獨立的后端進程崩潰。 在TeleDB能夠檢測內核限制的平臺上,服務器將不允許把這個參數設置為一個不安全的值。不過,并非所有平臺都能提供該信息,所以我們還是建議你在選擇值時要小心。
dynamic_shared_memory_type (enum)
指定服務器應該使用的動態共享內存實現。可能的值是posix(用于使用 shm_open分配的 POSIX 共享內存)、sysv (用于通過shmget分配的 System V 共享內存)、 windows(用于 Windows 共享內存)、mmap (使用存儲在數據目錄中的內存映射文件模擬共享內存)以及none(禁用 這個特性)。并非所有平臺上都支持所有值,平臺上第一個支持的選項就是其默認值。 在任何平臺上mmap選項都不是默認值,通常不鼓勵使用它,因為操作系統會 反復地把修改過的頁面寫回到磁盤上,從而增加了系統的I/O負載。不過當 pg_dynshmem目錄被存儲在一個 RAM 盤時或者沒有其他共享內存功能可用時, 它還是有用的。