| PostgreSQL 8.0.0 中文文件(轉譯自 PostgreSQL 中國 製作的簡體中文版本) | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Fast Forward | Next | |
一個資料庫管理員常常想知道,"現在系統正在幹什麼呢?"。 本章討論如何回答這個問題。
有一些工具可以用來監控資料庫的活動以及分析性能。 本章大部分內容是用於描述 PostgreSQL 的統計蒐集器(statistics collector), 但我們也不能忽視普通的 Unix 監控程序,比如 ps,top,iostat 和 vmstat。 同樣,一旦我們找出了一個性能惡劣的查詢,那麼我們可能還要用 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 的命令行。