?
本文檔使用 php中文網(wǎng)手冊(cè) 發(fā)布
下面的選項(xiàng)目的是在PostgreSQL代碼上使用, 并且在某些情況下可以幫助恢復(fù)嚴(yán)重?fù)p壞了的數(shù)據(jù)庫。在生產(chǎn)環(huán)境里沒有理由 使用這些設(shè)置。因此,我們把他們從樣例postgresql.conf 文件中排除了出去。請(qǐng)注意許多這些選項(xiàng)要求特殊的源代碼編譯標(biāo)志才能運(yùn)轉(zhuǎn)。
允許修改系統(tǒng)表的結(jié)構(gòu)。它可以被initdb使用。 這個(gè)值只能在服務(wù)器啟動(dòng)的時(shí)候設(shè)置。
打開各種斷言檢查。這是調(diào)試助手。如果你經(jīng)歷了奇怪的問題或者崩潰, 那么你可能會(huì)想把這個(gè)打開,因?yàn)樗赡鼙┞毒幊痰腻e(cuò)誤。要使用這個(gè) 選項(xiàng),我們必須在編譯PostgreSQL 的時(shí)候定義宏USE_ASSERT_CHECKING (通過configure選項(xiàng) --enable-cassert完成)。請(qǐng)注意,如果啟用斷言 選項(xiàng)編譯PostgreSQL,那么 debug_assertions缺省就是 on 。
讀取系統(tǒng)表時(shí)忽略系統(tǒng)索引(但是修改系統(tǒng)表時(shí)依然同時(shí)修改索引)。 這個(gè)在從系統(tǒng)索引被破壞的表中恢復(fù)數(shù)據(jù)的時(shí)候很有用。該參數(shù)不能在 會(huì)話啟動(dòng)之后修改。
如果為非零,那么在一個(gè)新的服務(wù)器進(jìn)程啟動(dòng)并完成認(rèn)證過程之后, 就會(huì)延遲這么多秒。這樣就給我們一個(gè)機(jī)會(huì)用調(diào)試器附著在一個(gè)服務(wù)器 進(jìn)程上跟蹤認(rèn)證里面的異常行為。該參數(shù)不能在會(huì)話啟動(dòng)之后修改。
如果為非零,那么在一個(gè)新的服務(wù)器進(jìn)程派生出來之后,就會(huì)延遲這么多秒, 然后才會(huì)繼續(xù)認(rèn)證過程。這樣就給我們一個(gè)機(jī)會(huì)用調(diào)試器附著在一個(gè)服務(wù)器 進(jìn)程上跟蹤認(rèn)證里面的異常行為。這個(gè)選項(xiàng)只能在服務(wù)器啟動(dòng)的時(shí)候或者 在postgresql.conf文件里設(shè)置。
為 LISTEN 和 NOTIFY 命令生成大量調(diào)試輸出。LISTEN 和NOTIFY必須是 DEBUG1 或者更低才能把這些輸出 分別發(fā)送到客戶端或者服務(wù)器日志。
啟用記錄與恢復(fù)有關(guān)的調(diào)試輸出,否則無法記錄。這個(gè)參數(shù)允許用戶 覆蓋log_min_messages的設(shè)置,但只用于具體消息。 主要在調(diào)試備庫時(shí)用。有效值包括DEBUG5,DEBUG4, DEBUG3,DEBUG2,DEBUG1和LOG。 LOG(缺省值)完全不會(huì)影響記錄。其他值會(huì)記錄優(yōu)先或更高的恢復(fù)相關(guān)的 調(diào)試信息,只要具有LOG優(yōu)先;對(duì)于log_min_messages的 普通設(shè)置,會(huì)無條件的將信息發(fā)送給服務(wù)器日志。這個(gè)參數(shù)只能在postgresql.conf 文件中或服務(wù)器啟動(dòng)時(shí)設(shè)置。
如果打開,發(fā)出在排序操作中的資源使用的有關(guān)信息。這個(gè)選項(xiàng)只有在編譯 PostgreSQL的時(shí)候定義了 TRACE_SORT宏的時(shí)候才可用(不過,目前 TRACE_SORT缺省就是定義了的值)。
如果開啟,發(fā)出鎖使用情況的信息。dump信息中包括鎖操作的類型,鎖的類型和 被鎖或未鎖的對(duì)象的唯一標(biāo)識(shí)符。同樣包括的還有已經(jīng)授予這個(gè)對(duì)象的鎖類型的位掩碼和 等待這個(gè)對(duì)象的鎖類型的位掩碼。對(duì)每一個(gè)鎖來說,授權(quán)鎖和等待鎖個(gè)數(shù)的統(tǒng)計(jì)也會(huì)一起dump。 一個(gè)日志文件輸出的例子如下:
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)
被dump的結(jié)構(gòu)的詳細(xì)信息可以在src/include/storage/lock.h中查看。
如果在編譯PostgreSQL時(shí)定義了LOCK_DEBUG宏,才可以使用這個(gè)參數(shù)。
如果開啟,發(fā)出輕量級(jí)鎖的使用信息。 輕量級(jí)鎖主要是為了主要的目的是提供互斥訪問共享內(nèi)存的數(shù)據(jù)結(jié)構(gòu)。
如果在編譯PostgreSQL時(shí)定義了LOCK_DEBUG宏,才可以使用這個(gè)參數(shù)。
如果開啟了,發(fā)出關(guān)于用戶鎖定使用的信息。與trace_locks的輸出一樣, 不過是只用于用戶鎖。
從8.2開始就廢除了用戶鎖,這個(gè)選項(xiàng)現(xiàn)在已經(jīng)無效了。
如果在編譯PostgreSQL時(shí)定義了LOCK_DEBUG宏, 才可以使用這個(gè)參數(shù)。
如果設(shè)置了,不會(huì)跟蹤小于這個(gè)OID的鎖。
如果在編譯PostgreSQL時(shí)定義了LOCK_DEBUG宏, 才可以使用這個(gè)參數(shù)。
無條件地跟蹤此表上的鎖(OID).
如果在編譯PostgreSQL時(shí)定義了LOCK_DEBUG宏, 才可以使用這個(gè)參數(shù)。
如果設(shè)置,死鎖時(shí)發(fā)生超時(shí),dump所有當(dāng)前鎖的信息。
如果在編譯PostgreSQL時(shí)定義了LOCK_DEBUG宏, 才可以使用這個(gè)參數(shù)。
如果設(shè)置,會(huì)記錄B-tree操作上的系統(tǒng)資源使用情況統(tǒng)計(jì)(內(nèi)存和CPU)。
如果在編譯PostgreSQL時(shí)定義了BTREE_BUILD_STATS宏, 才可以使用這個(gè)參數(shù)。
打開 WAL 相關(guān)的調(diào)試輸出。只有在編譯PostgreSQL 的時(shí)候打開了WAL_DEBUG宏的情況下,這個(gè)選項(xiàng)才可用。
如果偵測到一個(gè)損壞了的頁面頭通常會(huì)導(dǎo)致PostgreSQL 報(bào)告一個(gè)錯(cuò)誤,并且退出當(dāng)前命令。把zero_damaged_pages 設(shè)置為 on 則令系統(tǒng)報(bào)告一個(gè)警告,把損壞的頁面填充零,然后繼續(xù)處理。 這種行為會(huì)will destroy data,也就是所有在已經(jīng)損壞 頁面上的行。但是它允許你繞開壞頁面然后從表中尚存的未損壞頁面上繼續(xù) 檢索數(shù)據(jù)行。因此它在因?yàn)橛布蛘哕浖e(cuò)誤導(dǎo)致的崩潰中進(jìn)行恢復(fù)是很 有用的。通常你不應(yīng)該把它設(shè)置為 on ,除非你已經(jīng)徹底放棄從崩潰 的頁面中恢復(fù)數(shù)據(jù)。缺省的設(shè)置是off,并且只有超級(jí) 用戶可以改變它。