wal_level (enum)
wal_level決定多少信息寫入到 WAL 中。默認值是logical, 它寫入足夠的數據以支持WAL歸檔和復制,包括在備用服務器上運行只讀查詢。 minimal刪除除了從崩潰或立即關閉中恢復所需的信息之外的所有日志記錄。 最后,logical會增加支持邏輯解碼所需的信息。每個層次包括所有更低層次 記錄的信息。這個參數只能在服務器啟動時設置。在minimal級別中,某些批量操作的 WAL 日志可以被安全地跳過,這可以使那些操作更快。這種優化可以應用的操作包括:CREATE TABLE ASCREATE INDEXCLUSTER``COPY到在同一個事務中被創建或截斷的表中但最少的 WAL 不會包括足夠的信息來從基礎備份和 WAL 日志中重建數據,因此,要啟用 WAL 歸檔(archive_mode)和流復制,必須使用replica或更高級別。在logical層,與replica相同的信息會被記錄,外加上 允許從 WAL 抽取邏輯修改集所需的信息。使用級別 logical將增加 WAL 容量,特別是如果為了REPLICA IDENTITY FULL配置了很多表并且執行了很多UPDATE和DELETE 語句時。
fsync (boolean)
如果打開這個參數,數據庫服務器將嘗試確保更新被物理地寫入到磁盤,做法是發出fsync()系統調用或者使用多種等價的方法(見wal_sync_method)。這保證了數據庫集簇在一次操作系統或者硬件崩潰后能恢復到一個一致的狀態。雖然關閉fsync常常可以得到性能上的收益,但當發生斷電或系統崩潰時可能造成不可恢復的數據損壞。因此,只有在能很容易地從外部數據中重建整個數據庫時才建議關閉fsync。能安全關閉fsync的環境的例子包括從一個備份文件中初始加載一個新數據庫集簇、使用一個數據庫集簇來在數據庫被刪掉并重建之后處理一批數據,或者一個被經常重建并卻不用于失效備援的只讀數據庫克隆。單獨的高質量硬件不足以成為關閉fsync的理由。當把fsync從關閉改成打開時,為了可靠的恢復,需要強制在內核中的所有被修改的緩沖區進入持久化存儲。這可以在多個時機來完成:在集簇被關閉時或在fsync因為運行initdb --sync-only而打開時、運行sync時、卸載文件系統時或者重啟服務器時。在很多情況下,為不重要的事務關閉synchronous_commit可以提供很多關閉fsync的潛在性能收益,并不會有的同時,關閉fsync可以提供很多潛在的性能優勢,而不會有伴隨著的數據損壞風險。fsync只能在postgresql.conf文件中或在服務器命令行上設置。如果你關閉這個參數,請也考慮關閉full_page_writes。
synchronous_commit (enum)
指定在命令返回“success”指示給客戶端之前,一個事務是否需要等待 WAL 記錄被寫入磁盤。合法的值是on、remote_apply、remote_write、local和off。默認的并且安全的設置是on。當設置為off時,在向客戶端報告成功和真正保證事務不會被服務器崩潰威脅之間會有延遲(最大的延遲是wal_writer_delay的三倍)。不同于fsync,將這個參數設置為off不會產生數據庫不一致性的風險:一個操作系統或數據庫崩潰可能會造成一些最近據說已提交的事務丟失,但數據庫狀態是一致的,就像這些事務已經被干凈地中止。因此,當性能比完全確保事務的持久性更重要時,關閉synchronous_commit可以作為一個有效的代替手段。如果synchronous_standby_names被設置,這個參數也控制事務提交是否將等待事務的 WAL 記錄被復制到后備服務器上。當這個參數被設置為on時,直到來自于當前同步的后備服務器的一個回復指示該后備服務器已經收到了事務的提交記錄并將其刷入了磁盤,主服務器上的事務才會提交。這保證事務將不會被丟失,除非主服務器和后備服務器都遭受到了數據庫存儲損壞的問題。當設置為remote_apply>時,提交將等待,直到來自當前同步備用數據庫的回復表明它們已收到事務的提交記錄并應用它,以便它對備用數據庫上的查詢可見。當這個參數被設置為remote_write時,提交將等待,直到來自當前同步的后備服務器的一個回復指示該服務器已經收到了該事務的提交記錄并且已經把該記錄寫出到后備服務器的操作系統,但是該數據并不一定到達了后備服務器上的穩定存儲。這種設置足以保證數據在后備服務器的TeleDB實例崩潰時得以保存,但是不能保證后備服務器遭受操作系統級別崩潰時數據能被保持。最后,設置local會導致提交等待本地刷新到磁盤,但不會進行復制。當使用同步復制時通常不需要這樣做,但是為了完整性而提供。當使用同步復制時,它將對等待本地刷寫磁盤和 WAL 記錄復制很敏感,或者對允許事務異步提交很敏感。不過,設置local可以用于希望等待本地刷寫磁盤但不等待同步復制的事務。如果沒有設置synchronous_standby_names,設置on、remote_write和local都提供了同樣的同步級別:事務提交只等待本地刷寫磁盤。這個參數可以隨時被修改;任何一個事務的行為由其提交時生效的設置決定。因此,可以同步提交一些事務,同時異步提交其他事務。例如,當默認是相反時,實現一個單一多語句事務的異步提交,在事務中發出SET LOCAL synchronous_commit TO OFF。
wal_sync_method (enum)
用來向強制WAL 更新到磁盤的方法。如果fsync是關閉的,那么這個設置就不相關,因為 WAL 文件更新將根本不會被強制。可能的值是:open_datasync(用open()選項O_DSYNC寫 WAL 文件)fdatasync(在每次提交時調用fdatasync())fsync(在每次提交時調用fsync())fsync_writethrough(在每次提交時調用fsync(),強制任何磁盤寫高速緩存的直通寫)open_sync(用open()選項O_SYNC寫 WAL 文件)open_* 選項也可以使用O_DIRECT(如果可用)。不是在所有平臺上都能使用所有這些選擇。默認值是列表中第一個被平臺支持的那個, 不過fdatasync是 Linux 中的默認值。默認值不一定是最理想的;有可能需要修改這個設置或系統配置的其他方面來創建一個崩潰-安全的配置,或達到最佳性能。這個參數只能在postgresql.conf文件中或在服務器命令行上設置。
full_page_writes (boolean)
當這個參數為打開時,TeleDB服務器在一個檢查點之后的頁面的第一次修改期間將每個頁面的全部內容寫到 WAL 中。這么做是因為在操作系統崩潰期間正在處理的一次頁寫入可能只有部分完成,從而導致在一個磁盤頁面中混合有新舊數據。在崩潰后的恢復期間,通常存儲在 WAL 中的行級改變數據不足以完全恢復這樣一個頁面。存儲完整的頁面映像可以保證頁面被正確存儲,但代價是增加了必須被寫入 WAL 的數據量(因為 WAL 重放總是從一個檢查點開始,所以在檢查點后每個頁面的第一次改變時這樣做就夠了。因此,一種減小全頁面寫開銷的方法是增加檢查點間隔參數值)。把這個參數關閉會加快正常操作,但是在系統失敗后可能導致不可恢復的數據損壞,或者靜默的數據損壞。其風險類似于關閉fsync, 但是風險較小。并且只有在可關閉fsync的情況下才應該關閉它。關閉這個選項并不影響用于時間點恢復(PITR)的 WAL 歸檔使用。這個參數只能在postgresql.conf文件中或在服務器命令行上設置。默認值是on。
wal_log_hints (boolean)
當這個參數為on時,TeleDB服務器一個檢查點之后頁面被第一次修改期間把該磁盤頁面的整個內容都寫入 WAL,即使對所謂的提示位做非關鍵修改也會這樣做。如果啟用了數據校驗和,提示位更新總是會被 WAL 記錄并且這個設置會被忽略。你可以使用這個 設置測試如果你的數據庫啟用了數據校驗和,會有多少額外的 WAL 記錄發生。這個參數只能在服務器啟動時設置。默認值是off。
wal_compression (boolean)
當這個參數為on,full_page_writes為on,或者基礎備份中,TeleDB服務器壓縮完整頁面圖片到WAL中。在WAL回放中解壓壓縮的頁面圖片。缺省值為off。只有超級用戶可以修改這個設置。開啟這個參數可以減少WAL量而不增加不可恢復數據丟失的風險, 但是增加了WAL日志壓縮以及WAL回放解壓過程中一些額外CPU成本開銷。
wal_buffers (integer)
用于還未寫入磁盤的WAL 數據的共享內存量。默認值 -1 選擇等于shared_buffers的 1/32 的尺寸(大約3%),但是不小于64kB也不大于 WAL 段的尺寸(通常為16MB)。如果自動的選擇太大或太小可以手工設置該值,但是任何小于32kB的正值都將被當作32kB。這個參數只能在服務器啟動時設置。在每次事務提交時,WAL 緩沖區的內容被寫出到磁盤,因此極大的值不可能提供顯著的收益。不過,把這個值設置為幾個兆字節可以在一個繁忙的服務器(其中很多客戶端會在同一時間提交)上提高寫性能。由默認設置 -1 選擇的自動調節將在大部分情況下得到合理的結果。
wal_writer_delay (integer)
指定WAL編寫器刷新WAL的頻率。在刷新WAL之后,它會睡眠wal_writer_delay毫秒,除非被異步提交的事務喚醒。如果最后一次刷新發生的時間小于wal_writer_delay毫秒前, 并且從上一次刷寫發生以來產生了小于WAL的wal_writer_flush_after個字節, 則WAL僅寫入操作系統,而不刷新到磁盤。默認值是 200 毫秒(200ms)。需要注意的是,在許多系統上,有效的休眠延遲解析度是 10 毫秒;將wal_writer_delay設置為不是 10 的倍數將得到把它設置為下一個 10 的倍數同樣的效果。這個參數只能在postgresql.conf文件中或在服務器命令行上設置。
wal_writer_flush_after (integer)
指定WAL 寫入器刷寫 WAL 的頻繁程度。如果上一次刷寫發生在少于wal_writer_delay 毫秒以前并且從上一次刷寫發生以來產生了少于wal_writer_flush_after 字節的 WAL,WAL 將只被寫入到操作系統,而不刷新到磁盤。如果 wal_writer_flush_after被設置為0,則 WAL 數據立即被刷新。默認是1MB。這個參數只能在postgresql.conf文件中或者服務器命令行上設置。
commit_delay (integer)
在一次WAL 刷寫被發起之前,commit_delay增加一個時間延遲,以微秒計。如果系統負載足夠高,使得在一個給定間隔內有額外的事務準備好提交,那么通過允許更多事務通過一個單次 WAL 刷寫來提交能夠提高組提交的吞吐量。但是,它也把每次 WAL 刷寫的潛伏期增加到了最多commit_delay微秒。因為如果沒有其他事務準備好提交,就會浪費一次延遲,只有在當一次刷寫將要被發起時有至少commit_siblings個其他活動事務時,才會執行一次延遲。另外,如果fsync被禁用,則將不會執行任何延遲。默認的commit_delay是零(無延遲)。只有超級用戶才能修改這個設置。
commit_siblings (integer)
在執行commit_delay延遲時,要求的并發活動事務的最小數目。大一些的值會導致在延遲間隔期間更可能有至少另外一個事務準備好提交。默認值是五個事務。