| PostgreSQL 7.4 文檔 | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Fast Forward | Next | |
一個數據庫管理員常常想知道,"現在系統正在幹什麼呢?"。 本章討論如何回答這個問題。
有一些工具可以用來監控數據庫的活動以及分析性能。 本章大部分內容是用于描述 PostgreSQL 的統計收集器(statistics collector), 但我們也不能忽視普通的 Unix 監控程序,比如 ps 和top。 同樣,一旦我們找出了一個性能惡劣的查詢,那麼我們可能還要用 PostgreSQL 的 EXPLAIN 命令進一步分析。 Section 13.1 裡討論了 EXPLAIN 和其它用于理解獨立查詢的行為的方法。
在大多數平台上,PostgreSQL 修改 ps 輸出的命令標題,這樣我們就很容易找出某個服務器進程。一個簡單的顯示如下
$ ps auxww | grep ^postgres postgres 960 0.0 1.1 6104 1480 pts/1 SN 13:17 0:00 postmaster -i postgres 963 0.0 1.1 7084 1472 pts/1 SN 13:17 0:00 postgres: stats buffer process postgres 965 0.0 1.1 6152 1512 pts/1 SN 13:17 0:00 postgres: stats collector process postgres 998 0.0 2.3 6532 2992 pts/1 SN 13:18 0:00 postgres: tgl runbug 127.0.0.1 idle postgres 1003 0.0 2.4 6532 3128 pts/1 SN 13:19 0:00 postgres: tgl regression [local] SELECT waiting postgres 1016 0.1 2.4 6532 3080 pts/1 SN 13:19 0:00 postgres: tgl regression [local] idle in transaction
(調用 ps 的方法因不同的平台而略有不同,顯示出來的細節也有一些區別。這個例子來自一個最近的 Linux 系統。) 這裡顯示出來的第一個進程時 postmaster,主服務進程。 給它顯示的命令參數和運行它的時候給它的是一樣的。 下面兩個進程實現統計收集器,我們將在下一節裡詳細描述它。 (如果你設置了系統不啟動統計收集器,那麼它們不會出現。) 剩下的進程每個都是一個服務器進程,每個處理一個客戶的聯接。 每個這樣的進程都用下面的形式設置其命令行顯示:
postgres: user database host activity
在該客戶端聯接的生命期中,用戶,數據庫,和聯接源主機項都保持不變, 但是活躍性指示符會變化。活躍性可以是 idle (也就是說, 等待客戶端的命令),idle in transaction (在一個BEGIN 塊裡等待用戶),或者一個命令類型名,比如 SELECT。 同樣,如果服務器目前正在等待一個其它服務器進程持有的鎖的時候, 會在信息後面附加 waiting。在上面的例子中,我們可以推出:進程 1003 正在等待 1016完成其事務, 這樣才能施放一些鎖或者其它什麼東西.
提示: Solaris 需要特別的處理。 你必需使用 /usr/ucb/ps,而不是 /bin/ps.你還必需使用兩個 w 標志,而不是一個。另外,你最初調用 postmaster 時用到的命令行在 ps 狀態顯示中必須比 ps 給每個服務器進程顯示的短。如果沒滿足這三個條件, 那麼 ps 為每個服務器進程輸出的將是最初的 postmaster 的命令行。