Chapter 10. 監控資料庫的活動

Table of Contents
10.1. 標準 Unix 工具
10.2. 統計收集器
10.2.1. 統計收集器配置
10.2.2. 查看收集到的統計資訊
10.3. 查看鎖

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

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

10.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 為每個後端輸出的將是最初的 postmaster 的命令行.