在大多數 Unix 平台上,PostgreSQL 會修改其命令標題 (由 ps
報告),以便可以輕鬆識別個別伺服器程序。範例顯示如下:
$ ps auxww | grep ^postgres postgres 15551 0.0 0.1 57536 7132 pts/0 S 18:02 0:00 postgres -i postgres 15554 0.0 0.0 57536 1184 ? Ss 18:02 0:00 postgres: background writer postgres 15555 0.0 0.0 57536 916 ? Ss 18:02 0:00 postgres: checkpointer postgres 15556 0.0 0.0 57536 916 ? Ss 18:02 0:00 postgres: walwriter postgres 15557 0.0 0.0 58504 2244 ? Ss 18:02 0:00 postgres: autovacuum launcher postgres 15582 0.0 0.0 58772 3080 ? Ss 18:04 0:00 postgres: joe runbug 127.0.0.1 idle postgres 15606 0.0 0.0 58772 3052 ? Ss 18:07 0:00 postgres: tgl regression [local] SELECT waiting postgres 15610 0.0 0.0 58772 3056 ? Ss 18:07 0:00 postgres: tgl regression [local] idle in transaction
(ps
的適當調用方式因不同平台而異,所顯示的詳細資訊也不同。此範例來自最新的 Linux 系統。) 此處列出的第一個程序是主要伺服器程序。 為其顯示的命令參數與啟動時使用的參數相同。 接下來的四個程序是由主要程序自動啟動的背景工作程序。(如果您已設定系統不執行自動清理,則不會出現「自動清理啟動器」程序。) 其餘每個程序都是處理一個用戶端連線的伺服器程序。 每個此類程序都以以下形式設定其命令列顯示:
postgres:user
database
host
activity
使用者、資料庫和(用戶端)主機項目在用戶端連線的生命週期內保持不變,但活動指示符會變更。 活動可以是 idle
(即,等待用戶端命令)、idle in transaction
(在 BEGIN
區塊內等待用戶端)或命令類型名稱,例如 SELECT
。 此外,如果伺服器程序目前正在等待另一個工作階段持有的鎖定,則會附加 waiting
。 在上面的範例中,我們可以推斷程序 15606 正在等待程序 15610 完成其交易,從而釋放某些鎖定。(程序 15610 必須是封鎖者,因為沒有其他活動的工作階段。 在更複雜的情況下,有必要查看 pg_locks
系統檢視來判斷誰在封鎖誰。)
如果已設定 cluster_name,叢集名稱也會顯示在 ps
輸出中
$ psql -c 'SHOW cluster_name' cluster_name -------------- server1 (1 row) $ ps aux|grep server1 postgres 27093 0.0 0.0 30096 2752 ? Ss 11:34 0:00 postgres: server1: background writer ...
如果您已關閉 update_process_title,則活動指示符不會更新; 程序標題僅在新程序啟動時設定一次。 在某些平台上,這可以節省每個命令的可測量額外負荷;在其他平台上,這並不重要。
Solaris 需要特殊處理。 您必須使用 /usr/ucb/ps
,而不是 /bin/ps
。 您還必須使用兩個 w
旗標,而不僅僅是一個。 此外,您原始調用 postgres
命令必須具有比每個伺服器程序提供的更短的 ps
狀態顯示。 如果您未能完成所有三件事,則每個伺服器程序的 ps
輸出將是原始的 postgres
命令列。
如果您在文件中看到任何不正確、與特定功能的經驗不符或需要進一步澄清的內容,請使用 此表單 回報文件問題。