Chapter 23. 監控資料庫的活動

Table of Contents
23.1. 標準 Unix 工具
23.2. 統計蒐集器
23.2.1. 統計蒐集器配置
23.2.2. 查看蒐集到的統計訊息
23.3. 查看鎖

一個資料庫管理員常常想知道,"現在系統正在幹什麼呢?"。 本章討論如何回答這個問題。

有一些工具可以用來監控資料庫的活動以及分析性能。 本章大部分內容是用於描述 PostgreSQL統計蒐集器(statistics collector), 但我們也不能忽視普通的 Unix 監控程序,比如 pstopiostatvmstat。 同樣,一旦我們找出了一個性能惡劣的查詢,那麼我們可能還要用 PostgreSQLEXPLAIN 命令進一步分析。 Section 13.1 裡討論了 EXPLAIN 和其它用於理解獨立查詢的行為的方法。

23.1. 標準 Unix 工具

在大多數平台上,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 的命令行。