effective_io_concurrency (integer)
設置TeleDB可以同時被執行的并發磁盤 I/O 操作的數量。調高這個值,可以增加任何單個數據庫會話試圖并行發起的 I/O 操作的數目。允許的范圍是 1 到 1000,或 0 表示禁用異步 I/O 請求。當前這個設置僅影響位圖堆掃描。對于磁盤驅動器,這個設置的一個很好的出發點是組成一個被用于該數據庫的 RAID 0 條帶或 RAID 1 鏡像的獨立驅動器數量(對 RAID 5 而言,校驗驅動器不計入)。 但是,如果數據庫經常忙于在并發會話中發出的多個查詢,較低的值可能足以使磁盤陣列繁忙。比保持磁盤繁忙所需的值更高的值只會造成額外的 CPU 開銷。SSD 以及其他基于內存的存儲常常能處理很多并發請求, 因此它們的最佳值可能是數百。異步 I/O 依賴于一個有效的posix_fadvise函數 (一些操作系統可能沒有)。 如果不存在這個函數,將這個參數設置為除 0 之外的任何東西將導致錯誤。在一些操作系統上(如Solaris) 雖然提供了這個函數,但它不會做任何事情。支持的系統上缺省為1,否則為0。對于一個特定表空間中的表,可以通過設定該表空間的同名參數(見ALTER TABLESPACE) 可以覆蓋這個值。
max_worker_processes (integer)
設置系統能夠支持的后臺進程的最大數量。這個參數只能在服務器啟動時設置。默認值為8。在運行一個后備服務器時,你必須把這個參數設置為等于或者高于主控服務器上的值。否則, 后備服務器上可能不會允許查詢。修改此值時,也要考慮調整 max_parallel_workers和 max_parallel_workers_per_gather。
max_parallel_workers_per_gather (integer)
設置單個Gather或Gather Merge節點能夠開始的工作者的最大數量。 并行工作者會從max_worker_processes建立的進程池中取得, 受限于max_parallel_workers。 注意所要求的工作者數量在運行時可能實際無法被滿足。如果這種事情發生, 該計劃將會以比預期更少的工作者運行,這可能會不太高效。默認值是2。 把這個值設置為 0將會禁用并行查詢執行。注意并行查詢可能消耗比非并行查詢更多的資源,因為每一個工作者進程時一個完全獨立的進程,它對系統產生的影響大致和一個額外的用戶會話相同。在為這個設置選擇值時, 以及配置其他控制資源利用的設置(例如work_mem)時,應該把這個因素考慮在內。work_mem 之類的資源限制會被獨立地應用于每一個工作者,這意味著所有進程的總資源利用可能會比單個進程時高得多。例如,一個使用 4 個工作者的并行查詢使用的 CPU 時間、內存、I/O 帶寬可能是不使用工作者時的 5 倍之多。
max_parallel_workers (integer)
設置系統支持并行查詢的最大工作數。默認值為8。在增加或減少此值時,還應考慮調整max_parallel_workers_per_gather。此外,請注意,此值高于max_worker_processes 的設置將不起作用,因為并行工作進程將從該設置建立的工作進程池中獲取。
backend_flush_after (integer)
只要一個后端寫入了超過backend_flush_after字節,就會嘗試強制 OS 把這些寫發送到底層存儲。 這樣做將會限制內核頁高速緩存中的臟數據數量,降低在檢查點末尾發出fsync時或者 OS 在后臺大批寫回數據時卡住的可能性。這常常會導致極大降低的事務延遲,但是也有一些情況中(特別是負載超過shared_buffers但低于 OS 的頁面高速緩存時),性能可能會下降。這個設置可能在某些平臺上沒有效果。合法的范圍位于0 (禁用強制寫回)和2MB之間。默認是0,即沒有強制寫回。(如果BLCKSZ不是8kB,最大值將按比例縮放。)
old_snapshot_threshold (integer)
設置在使用快照時,一個快照可以被使用而沒有發生snapshot too old 錯誤風險的最小時間。這個參數只能在服務器啟動時設置。如果超過該閾值,舊數據將被清理掉。這可以有助于阻止長時間使用的快照造成的快照膨脹。 為了阻止由于本來對該快照可見的數據被清理導致的不正確結果, 當快照比這個閾值更舊并且該快照被用來讀取一個該快照建立以來被修改過的頁面時, 將會產生一個錯誤。值為-1會禁用這個特性,并且這個值是默認值。 對于生產工作有用的值可能從幾個小時到幾天。該設置將被轉換成分鐘粒度, 并且小數字(例如0或者1min) 被允許只是因為它們有時對于測試有用。雖然允許高達60d的設置, 但是請注意很多負載情況下,很短的時間幀里就可能發生極大的膨脹或者事務 ID 回卷。當這個特性被啟用時,關系末尾的被清出的空間不能被釋放給操作系統, 因為那可能會移除用于檢測snapshot too old情況所需的信息。 所有分配給關系的空間還將與該關系關聯在一起便于重用, 除非它們被顯式地釋放(例如,用VACUUM FULL)。這個設置不會嘗試保證在任何特殊情況下都會生成錯誤。事實上,如果(例如) 可以從一個已經物化了一個結果集的游標中生成正確的結果, 即便被引用表中的底層行已經被清理掉也不會生成錯誤。 某些表不能被過早地安全清除,并且因此將不受這個設置的影響, 比如系統目錄。對于這些表, 這個設置將不能降低膨脹,也不能降低在掃描時產生 snapshot too old錯誤的可能性。