PostgreSQL 開發(fā)者選項

2021-08-31 14:50 更新

下面的參數(shù)目的是用在PostgreSQL源代碼上, 并且在某些情況下可以幫助恢復(fù)嚴重損壞了的數(shù)據(jù)庫。在一個生產(chǎn)數(shù)據(jù)庫中沒有理由使用它們。同樣,它們被從例子postgresql.conf文件中排除。請注意許多這些參數(shù)要求特殊的源代碼編譯標(biāo)志才能工作。

allow_system_table_mods (boolean)

允許對系統(tǒng)表結(jié)構(gòu)的修改,以及對系統(tǒng)表的某些其他危險操作。這是不允許的,即使是對超級用戶。 不理智地使用此設(shè)置可能導(dǎo)致無法恢復(fù)的數(shù)據(jù)丟失或嚴重損壞數(shù)據(jù)庫系統(tǒng)。只有超級用戶才能更改此設(shè)置

backtrace_functions (string)

這個參數(shù)包含一個以逗號分隔的C函數(shù)名稱列表。 如果出現(xiàn)錯誤,并且發(fā)生錯誤的內(nèi)部C函數(shù)的名稱與列表中的值相匹配,那么將向服務(wù)器日志中寫入一個回溯跟蹤信息和錯誤消息。 這可以用來調(diào)試源代碼的特定區(qū)域。

回溯支持并非在所有平臺上都可以使用,并且回溯的質(zhì)量取決于編譯選項。

該參數(shù)只能由超級用戶設(shè)置。

ignore_system_indexes (boolean)

讀取系統(tǒng)表時忽略系統(tǒng)索引(但是修改系統(tǒng)表時依然同時更新索引)。這在從被破壞的系統(tǒng)索引中恢復(fù)數(shù)據(jù)的時有用。這個參數(shù)在會話開始之后不能被更改。

post_auth_delay (integer)

執(zhí)行身份驗證過程后啟動新服務(wù)器進程時延遲的時間量。這是為了給開發(fā)者們一個機會在一個服務(wù)器進程上附加一個調(diào)試器。 如果指定值時沒有單位,則以秒為單位。0值(默認值)禁用延遲。這個參數(shù)在會話開始之后不能被更改。

pre_auth_delay (integer)

在新服務(wù)器進程分叉后,在進行身份驗證過程之前,延遲的時間量。這是為了給開發(fā)者們一個機會在一個服務(wù)器進程上附加一個調(diào)試器來跟蹤認證過程中的不當(dāng)行為。 如果指定值時沒有單位,則以秒為單位。0值(默認值)禁用延遲。這個參數(shù)只能在postgresql.conf文件中或在服務(wù)器命令行上設(shè)置。

trace_notify (boolean)

LISTENNOTIFY命令生成大量調(diào)試輸出。client_min_messageslog_min_messages必須是 DEBUG1或者更低才能把這種輸出分別發(fā)送到客戶端或者服務(wù)器日志。

trace_recovery_messages (enum)

啟用記錄與恢復(fù)有關(guān)的調(diào)試輸出,否則無法記錄。這個參數(shù)允許用戶覆蓋log_min_messages的正常設(shè)置,但只用于指定的消息。這個參數(shù)的目的是用來調(diào)試熱后備。有效值包括DEBUG5、DEBUG4、DEBUG3、 DEBUG2、DEBUG1LOG。默認值LOG完全不會影響日志決定。其他值會記錄相關(guān)級別或更高級別的與恢復(fù)相關(guān)的調(diào)試消息,就好像它們具有LOG優(yōu)先級一樣;對于log_min_messages的通用設(shè)置,這會無條件的將消息發(fā)送給服務(wù)器日志。這個參數(shù)只能在 postgresql.conf文件中或在服務(wù)器命令行上設(shè)置。

trace_sort (boolean)

如果打開,發(fā)出在排序操作中的資源使用的相關(guān)信息。只有在編譯PostgreSQL時定義了TRACE_SORT宏, 這個參數(shù)才可用(不過,當(dāng)前在默認情況下就定義了TRACE_SORT)。

trace_locks (boolean)

如果開啟,發(fā)出鎖使用情況的信息。被轉(zhuǎn)儲信息中包括鎖操作的類型、鎖的類型和 被鎖或被解鎖對象的唯一標(biāo)識符。同樣包括的還有已經(jīng)授予這個對象的鎖類型的位掩碼和 等待這個對象的鎖類型的位掩碼。對每一種鎖類型,已授權(quán)鎖和等待鎖的計數(shù)也會被一起轉(zhuǎn)儲。一個日志文件輸出的例子如下:

LOG:  LockAcquire: new: lock(0xb7acd844) id(24688,24696,0,0,0,1)
      grantMask(0) req(0,0,0,0,0,0,0)=0 grant(0,0,0,0,0,0,0)=0
      wait(0) type(AccessShareLock)
LOG:  GrantLock: lock(0xb7acd844) id(24688,24696,0,0,0,1)
      grantMask(2) req(1,0,0,0,0,0,0)=1 grant(1,0,0,0,0,0,0)=1
      wait(0) type(AccessShareLock)
LOG:  UnGrantLock: updated: lock(0xb7acd844) id(24688,24696,0,0,0,1)
      grantMask(0) req(0,0,0,0,0,0,0)=0 grant(0,0,0,0,0,0,0)=0
      wait(0) type(AccessShareLock)
LOG:  CleanUpLock: deleting: lock(0xb7acd844) id(24688,24696,0,0,0,1)
      grantMask(0) req(0,0,0,0,0,0,0)=0 grant(0,0,0,0,0,0,0)=0
      wait(0) type(INVALID)

被轉(zhuǎn)儲結(jié)構(gòu)的詳細信息可以在src/include/storage/lock.h中找到。

只有在編譯PostgreSQL時定義了LOCK_DEBUG宏, 這個參數(shù)才可用。

trace_lwlocks (boolean)

如果開啟,發(fā)出輕量級鎖的使用信息。輕量級鎖主要是為了提供對共享內(nèi)存數(shù)據(jù)結(jié)構(gòu)的互斥訪問。

只有在編譯PostgreSQL時定義了LOCK_DEBUG宏, 這個參數(shù)才可用。

trace_userlocks (boolean)

如果開啟,發(fā)出關(guān)于用戶鎖使用的信息。與trace_locks的輸出一樣,但只用于咨詢鎖。

只有在編譯PostgreSQL時定義了LOCK_DEBUG宏, 這個參數(shù)才可用。

trace_lock_oidmin (integer)

如果設(shè)置,不會跟蹤小于這個 OID 的鎖(用于避免在系統(tǒng)表上的輸出)。

只有在編譯PostgreSQL時定義了LOCK_DEBUG宏, 這個參數(shù)才可用。

trace_lock_table (integer)

無條件地跟蹤此表(OID)上的鎖。

只有在編譯PostgreSQL時定義了LOCK_DEBUG宏, 這個參數(shù)才可用。

debug_deadlocks (boolean)

如果設(shè)置,當(dāng)死鎖超時發(fā)生時,轉(zhuǎn)儲所有當(dāng)前鎖的信息。

只有在編譯PostgreSQL時定義了LOCK_DEBUG宏, 這個參數(shù)才可用。

log_btree_build_stats (boolean)

如果設(shè)置,會記錄 B 樹操作上的系統(tǒng)資源使用情況統(tǒng)計(內(nèi)存和 CPU)。

只有在編譯PostgreSQL時定義了BTREE_BUILD_STATS宏, 這個參數(shù)才可用。

wal_consistency_checking (string)

這個參數(shù)被設(shè)計用來檢查WAL重做例程中的缺陷。當(dāng)這個參數(shù)被啟用時,被修改的任何緩沖區(qū)的全頁映像及其WAL記錄都被加入到記錄中。如果該記錄后來被重放,系統(tǒng)將首先應(yīng)用每個記錄然后測試該記錄修改的緩沖區(qū)是否符合存儲的映像。在某些情況下(例如提示位),小的變動是可以接受的,并且會被忽略。任何預(yù)期之外的差別都將導(dǎo)致致命錯誤,最后中止恢復(fù)。

這個設(shè)置的默認值是空字符串,它將禁用這一特性。它可以被設(shè)置為all以檢查所有記錄,或者被設(shè)置為一個逗號分隔的資源管理器列表用以檢查那些資源管理器產(chǎn)生的記錄。當(dāng)前,支持的資源管理器是heap、heap2、btree、hash、 gin、gist、sequence、spgist、brin以及generic。只有超級用戶可以更改這一設(shè)置。

wal_debug (boolean)

如果被打開,WAL 相關(guān)的調(diào)試輸出將被發(fā)出。只有在編譯PostgreSQL時定義了WAL_DEBUG宏的情況下,這個參數(shù)才可用。

ignore_checksum_failure (boolean)

只有當(dāng)data checksums被啟用時才有效。

在讀取過程中檢測到一次校驗碼失敗通常會導(dǎo)致PostgreSQL報告一個錯誤。設(shè)置ignore_checksum_failure為打開會導(dǎo)致系統(tǒng)忽略失?。ǖ侨匀粓蟾嬉粋€警告),并且繼續(xù)執(zhí)行。這種行為可能導(dǎo)致崩潰、傳播或隱藏損壞或者其他嚴重的問題。但是,它允許你繞過錯誤并且在塊頭部仍然健全的情況下從表中檢索未損壞的元組。如果頭部被損壞,即便這個選項被啟用系統(tǒng)也將報告一個錯誤。默認設(shè)置是 off,并且只能被超級用戶改變。

zero_damaged_pages (boolean)

檢測到一個損壞的頁面頭部通常會導(dǎo)致PostgreSQL報告一個錯誤,并且中止當(dāng)前事務(wù)。把zero_damaged_pages設(shè)置為打開會讓系統(tǒng)報告一個警告、把損壞的頁面填充零,然后繼續(xù)處理。這種行為會毀掉數(shù)據(jù),即被損壞頁面上的所有行。但是它允許你繞開錯誤并且從可能存在表中的任何未損壞頁面中檢索行。如果由于一次硬件或軟件錯誤而發(fā)生毀壞,這種方法可用于恢復(fù)數(shù)據(jù)。通常你不應(yīng)該把它設(shè)置為打開,除非你已經(jīng)徹底放棄從表的損壞頁面中恢復(fù)數(shù)據(jù)。被填充零的頁面不會被強制到磁盤上,因此我們推薦在再次關(guān)閉這個參數(shù)之前先重建表或索引。默認的設(shè)置是 off,并且只有超級用戶可以改變它。

ignore_invalid_pages (boolean)

如果設(shè)置為 off(默認值),則在恢復(fù)期間檢測到引用無效頁面的 WAL 記錄會導(dǎo)致 PostgreSQL 引發(fā) PANIC 級別錯誤,中止恢復(fù)。 將ignore_invalid_pages設(shè)置為on會導(dǎo)致系統(tǒng)忽略 WAL 記錄中的無效頁面引用(但仍報告警告),并繼續(xù)恢復(fù)。 此行為可能會導(dǎo)致崩潰、數(shù)據(jù)丟失、傳播或隱藏腐敗,或其他嚴重問題。 但是,它可能允許你通過 PANIC 級錯誤,完成恢復(fù),并啟動服務(wù)器。 參數(shù)只能在服務(wù)器啟動時設(shè)置。它僅在恢復(fù)期間或待機模式下生效。

jit_debugging_support (boolean)

如果LLVM有所需要的功能,用GDB注冊所生成的函數(shù)。這會讓調(diào)試更加容易。默認設(shè)置是off。這個參數(shù)只能在服務(wù)器啟動時設(shè)置。

jit_dump_bitcode (boolean)

把生成的LLVM IR寫出到文件系統(tǒng),寫到data_directory中。只有在做JIT內(nèi)部實現(xiàn)工作時,這個參數(shù)才能派上用場。默認設(shè)置是off。這個參數(shù)只能由超級用戶修改。

jit_expressions (boolean)

當(dāng)JIT編譯被激活時(見第 31.2 節(jié)),確定表達式是否用JIT編譯。默認值是on

jit_profiling_support (boolean)

如果LLVM有所需的功能,發(fā)出需要的數(shù)據(jù)以允許perf對JIT生成的函數(shù)畫像。這會寫出文件到$HOME/.debug/jit/中,如果需要,由用戶負責(zé)對其執(zhí)行清除。默認設(shè)置是off。這個參數(shù)只能在服務(wù)器啟動時設(shè)置。

jit_tuple_deforming (boolean)

當(dāng)JIT編譯被激活時(見第 31.2 節(jié)),確定元組拆解是否被JIT編譯。默認值是on。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號