PostgreSQL7.0手冊(cè)-管理員手冊(cè)-27. 運(yùn)行時(shí)環(huán)境
2019-09-08 23:33:53
供稿:網(wǎng)友
第二十七章. 運(yùn)行時(shí)環(huán)境
內(nèi)容
在 Unix 里使用 Postgres
啟動(dòng) postmaster
使用 pg_options
本章描述 Postgres 和操作系統(tǒng)之間的關(guān)系.
在 Unix 里使用 Postgres
所有直接從 Unix shell 運(yùn)行的 Postgres 命令都放在 “.../bin”.將這個(gè)目錄包含在你的搜索目錄中可以讓你執(zhí)行命令更容易些.
每個(gè)節(jié)點(diǎn)都有一套系統(tǒng)表.包括一個(gè)載有所有有效的 Postgres 用戶(hù)記錄的表(pg_user)。這些記錄聲明一套 Postgres 權(quán)限,比如說(shuō)是否擁有Postgres 超級(jí)用戶(hù)權(quán)限,創(chuàng)建/刪除數(shù)據(jù)庫(kù)的權(quán)限,以及更新數(shù)據(jù)庫(kù)系統(tǒng)表的權(quán)限等.除非一個(gè) Unix 用戶(hù)在這個(gè)表里面有合適的記錄,否則他在 Postgres 里不能做任何事情.另外,更詳細(xì)的系統(tǒng)表的信息可以通過(guò)查詢(xún)對(duì)應(yīng)的表的方式來(lái)獲得。
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
啟動(dòng) postmaster
除非 postmaster 進(jìn)程在運(yùn)行,否則我們無(wú)法對(duì)數(shù)據(jù)庫(kù)進(jìn)行任何操作.作為節(jié)點(diǎn)管理員,在運(yùn)行 postmaster 之前有許多事情要注意.這些都已經(jīng)在本手冊(cè)安裝和配置章節(jié)中討論過(guò).不過(guò),如果 Postgres 是完全按照安裝指導(dǎo)中描述的那樣安裝的話(huà),下面的簡(jiǎn)單命令就是你運(yùn)行 postmaster 所要執(zhí)行的:
% postmaster
postmaster 有時(shí)會(huì)打印出對(duì)排除問(wèn)題很有幫助的信息.如果你希望看到 postmaster 輸出的調(diào)試信息,你可以帶 -d 選項(xiàng)運(yùn)行之然后把輸出重定向到一個(gè)日志文件中:
% postmaster -d > pm.log 2>&1 &
如果你不希望看到這些信息,可以鍵入
% postmaster -S
postmaster 就會(huì)"安靜"下來(lái).在這個(gè)例子里不需要有一個(gè)與號(hào)("&")在行尾,因?yàn)楫?dāng)聲明 -S 后 postmaster 自動(dò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è)文件的信息.這就讓我們可以動(dòng)態(tài)更改 Postgres 的運(yùn)行時(shí)參數(shù)而不需要重新啟動(dòng)它.在這個(gè)文件中聲明的選項(xiàng)可能是被追蹤包使用的調(diào)試標(biāo)志(backend/utils/misc/trace.c)或者是后端用于控制其特性的一些數(shù)字參數(shù).
在后端啟動(dòng)的時(shí)候所有 pg_options 都初始化為零.新的或者被改變了的選項(xiàng)將被所有新啟動(dòng)的后端讀取.要令選項(xiàng)的更改對(duì)所有正在運(yùn)行的后端都起做用,我們要向 postmaster 發(fā)送一個(gè) SIGHUP 信號(hào).該信號(hào)將自動(dòng)發(fā)送給所有后端.我們也可以通過(guò)給指定的后端發(fā)送 SIGHUP 信號(hào)的方法來(lái)讓更改只對(duì)某個(gè)后端生效.
pg_options 同樣可以使用 Postgres 的 -T 開(kāi)關(guān)來(lái)聲明:
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 文件的格式如下:
# 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ě).
例 27-1. pg_options 文件
例如,我的 pg_options 文件包含下面的值:
verbose=2
query
hostlookup
showportnumber
可識(shí)別的選項(xiàng)
目前已經(jīng)定義的選項(xiàng)是:
all
全局追蹤標(biāo)志,允許的值是:
0
追蹤信息(一個(gè)一個(gè))分別打開(kāi)
1
打開(kāi)所有追蹤信息
-1
關(guān)閉所有追蹤信息
verbose
冗長(zhǎng)標(biāo)志.允許的值是:
0
沒(méi)有信息,這是缺省值.
1
打印消息信息.
2
打印更多消息信息.
query
查詢(xún)追蹤標(biāo)志,允許的值是:
0
不打印查詢(xún).
1
在一行內(nèi)打印壓縮了的查詢(xún).
4
打印全部查詢(xún).
plan
打印查詢(xún)規(guī)劃.
parse
打印分析器輸出.
rewritten
打印重寫(xiě)了的查詢(xún).
pretty_plan
漂亮地(?)打印查詢(xún)規(guī)劃.
pretty_parse
漂亮地(?)打印分析器輸出.
pretty_rewritten
漂亮地(?)打印重寫(xiě)了的查詢(xún).
parserstats
打印分析器統(tǒng)計(jì).
plannerstats
打印規(guī)劃器統(tǒng)計(jì)信息.
executorstats
打印執(zhí)行器統(tǒng)計(jì)信息.
shortlocks
當(dāng)前沒(méi)有使用但將來(lái)需要使用的特性.
locks
追蹤鎖.
userlocks
追蹤用戶(hù)鎖.
spinlocks
追蹤旋轉(zhuǎn)鎖.
notify
追蹤通知函數(shù).
malloc
目前未用.
palloc
目前未用.
lock_debug_oidmin
鎖追蹤的最小的關(guān)系對(duì)象標(biāo)識(shí)(oid).
lock_debug_relid
oid,如果為非零,由鎖追蹤的關(guān)系.
lock_read_priority
目前未用.
deadlock_timeout
死鎖檢測(cè)計(jì)時(shí)器.
syslog
syslog 標(biāo)志.允許的值是:
0
消息輸出到標(biāo)準(zhǔn)輸出/標(biāo)準(zhǔn)錯(cuò)誤(stdout/stderr).
1
消息輸出到標(biāo)準(zhǔn)輸出/標(biāo)準(zhǔn)錯(cuò)誤 (stdout/stderr)和 syslog.
2
消息只輸出到 syslog.
hostlookup
打開(kāi)在 ps_status 里的主機(jī)名查找.
showportnumber
在 ps_status 里顯示端口號(hào).
nofsync
以每用戶(hù)為單位關(guān)閉 fsync.
--------------------------------------------------------------------------------