国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > PostgreSQL > 正文

PostgreSQL7.0手冊(cè)-開(kāi)發(fā)者手冊(cè) -62. pg_options

2019-09-08 23:34:07
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
第六十二章. pg_options
注意:由 Massimo Dal Zotto 提供
參數(shù)文件 data/pg_options 包含被后端用于控制跟蹤信息和其他可調(diào)節(jié)參數(shù)的運(yùn)行時(shí)選項(xiàng).當(dāng)后端收到一個(gè) SIGHUP 信號(hào)后會(huì)重新讀取這個(gè)文件的信息.這就讓我們可以更改 Postgres 的運(yùn)行時(shí)參數(shù)而不需要重新啟動(dòng)它.在這個(gè)文件中聲明的選項(xiàng)可能是被追蹤包使用的調(diào)試標(biāo)志(backend/utils/misc/trace.c)或者是后端用于控制其特性的一些數(shù)字參數(shù).新的選項(xiàng)和參數(shù)必須在backend/utils/misc/trace.c和backend/include/utils/trace.h 里定義. 
例如,假設(shè)我們想在文件 foo.c 里加入一個(gè)條件跟蹤信息和一個(gè)可調(diào)節(jié)的數(shù)字參數(shù).我們所要做的是向文件 backend/include/utils/trace.h 里增加常量 TRACE_FOO 和 OPT_FOO_PARAM: 

/* file trace.h */
enum pg_option_enum {
    ...
    TRACE_FOO,                  /* trace foo functions */
    OPT_FOO_PARAM,              /* foo tunable parameter */

    NUM_PG_OPTIONS              /* must be the last item of enum */
};
和文件 backend/utils/misc/trace.c 里對(duì)應(yīng)的行: 
/* file trace.c */
static char *opt_names[] = {
    ...
    "foo",                      /* trace foo functions */
    "fooparam"                  /* foo tunable parameter */
};
兩個(gè)文件里的選項(xiàng)必須嚴(yán)格地按相同順序排列.在源文件 foo 里我們現(xiàn)在可以用下面的代碼代表新的標(biāo)志: 
/* file foo.c */
#include "trace.h"
#define foo_param pg_options[OPT_FOO_PARAM]

int
foo_function(int x, int y)
{
    TPRINTF(TRACE_FOO, "entering foo_function, foo_param=%d", foo_param);
    if (foo_param > 10) {
        do_more_foo(x, y);
    }
}
現(xiàn)有的要使用私有跟蹤標(biāo)志的文件只須加入下面代碼就完成了修改: 
#include "trace.h"
/* int my_own_flag = 0; -- removed */
#define my_own_flag pg_options[OPT_MY_OWN_FLAG]
在后端啟動(dòng)的時(shí)候所有 pg_options 都初始化為零.如果我們需要一個(gè)不同的初始值,我們必須在 PostgresMain 開(kāi)頭的地方增加一些初始化代碼.現(xiàn)在我們可以設(shè)置 foo_param 參數(shù)并且可以通過(guò)向文件 data/pg_options 里寫(xiě)數(shù)值來(lái)打開(kāi) foo 追蹤: 
# file pg_options
...
foo=1
fooparam=17
新的選項(xiàng)將被所有新啟動(dòng)的后端讀?。钸x項(xiàng)的更改對(duì)所有正在運(yùn)行的后端都起做用,我們要向postmaster 發(fā)送一個(gè) SIGHUP 信號(hào).該信號(hào)將自動(dòng)發(fā)送給所有后端.我們也可以通過(guò)給指定的后端發(fā)送 SIGHUUP 信號(hào)的方法來(lái)讓更改只對(duì)某個(gè)后端生效. 
pg_options 同樣可以使用 Postgres 的 -T 開(kāi)關(guān): 

postgres options -T "verbose=2,query,hostlookup-"
這樣,用于打印錯(cuò)誤和調(diào)試信息的函數(shù)就可以利用 syslog(2) 功能了.向標(biāo)準(zhǔn)輸出(stdout)或標(biāo)準(zhǔn)錯(cuò)誤(stderr)打印的信息是帶有時(shí)標(biāo)和后端進(jìn)程號(hào)前綴的字串: 
#timestamp          #pid    #message
980127.17:52:14.173 [29271] StartTransactionCommand
980127.17:52:14.174 [29271] ProcessUtility: drop table t;
980127.17:52:14.186 [29271] SIIncNumEntries: table is 70% full
980127.17:52:14.186 [29286] Async_NotifyHandler
980127.17:52:14.186 [29286] Waking up sleeping backend process
980127.19:52:14.292 [29286] Async_NotifyFrontEnd
980127.19:52:14.413 [29286] Async_NotifyFrontEnd done
980127.19:52:14.466 [29286] Async_NotifyHandler done
這種格式改善了日志的可讀性并且讓人們可以弄明白某后端何時(shí)在做何事.同樣這也讓我們很容易寫(xiě)出簡(jiǎn)單的監(jiān)控日志的 awk 或 perl 腳本來(lái)跟蹤數(shù)據(jù)庫(kù)錯(cuò)誤或問(wèn)題,或者計(jì)算交易時(shí)間統(tǒng)計(jì)數(shù)據(jù). 
向 syslog (系統(tǒng)日志)打印的信息使用了日志工具 LOG_LOCAL0.syslog的使用可以由 syslog 的 pg_option 控制.不幸的是,許多函數(shù)調(diào)用直接用 printf() 把它們的信息輸出到標(biāo)準(zhǔn)輸出(stdout)或標(biāo)準(zhǔn)錯(cuò)誤(stderr)中去了,這樣的輸出不能重定向到 syslog 而且也不會(huì)有時(shí)標(biāo).我們的建議是所有對(duì)printf的調(diào)用都用宏 PRINTF 代替,所有向標(biāo)準(zhǔn)錯(cuò)誤(stderr)的輸出都用 EPRINTF 替換,這樣我們就可以將所有輸出都控制在統(tǒng)一的方法下. 

使用新 pg_options 的機(jī)制比定義新的后端開(kāi)關(guān)的方法更方便是因?yàn)椋骸?

我們不必為我們想控制的每件事情都定義一個(gè)不同的開(kāi)關(guān).所有選項(xiàng)都作為關(guān)鍵字定義在一個(gè)存儲(chǔ)在數(shù)據(jù)目錄中的外部文件中。
我們不必為修改某幾個(gè)選項(xiàng)設(shè)置而重起Postgres.通常后端參數(shù)是為postmaster聲明,然后在后端啟動(dòng)時(shí)傳遞到每個(gè)后端.現(xiàn)在這些選項(xiàng)是從文件中讀取的.
我們可以在后端運(yùn)行的時(shí)候更改選項(xiàng).因此我們可以在出現(xiàn)問(wèn)題時(shí)才激活調(diào)試信息進(jìn)行追蹤.我們同樣還可以對(duì)那些可調(diào)節(jié)的參數(shù)賦予不同的值進(jìn)行嘗試.

pg_options 文件的格式如下: 
# comment
option=integer_value  # set value for option
option                # set option = 1
option+               # set option = 1
option-               # set option = 0
注意 keyword 可以是定義在 backend/utils/misc/trace.c 里的選項(xiàng)名的縮寫(xiě). 
請(qǐng)參考管理員手冊(cè)中關(guān)于運(yùn)行時(shí)選項(xiàng)的章節(jié)獲取目前支持的選項(xiàng)的完整列表?!?

有一些現(xiàn)在正使用私有變量和選項(xiàng)開(kāi)關(guān)的代碼已經(jīng)修改為利用 pg_options 特性了,主要是在 postgres.c 里.我們建議可以把所有現(xiàn)存的代碼都改成這樣,所以我們可以去掉很多 Postgres 命令行上的開(kāi)關(guān)而且我們可以有更容易調(diào)節(jié)的選項(xiàng)?。@些選項(xiàng)都是在同一個(gè)位置存放的.
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 三明市| 潢川县| 大连市| 马龙县| 海原县| 从化市| 西峡县| 扬中市| 平顶山市| 兴安盟| 山东省| 清流县| 闽侯县| 太仆寺旗| 格尔木市| 柏乡县| 曲沃县| 和静县| 谢通门县| 嫩江县| 汝南县| 屯留县| 易门县| 新疆| 本溪市| 修水县| 青龙| 仁化县| 竹溪县| 余干县| 永吉县| 南靖县| 南安市| 兰坪| 彰化县| 德安县| 镇平县| 昭觉县| 迁西县| 石家庄市| 陵水|