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