PostgreSQL之pg_stat_activity


what's the pg_stat_activity

  pg_stat_activity 是 PostgreSQL 內置的一個系統視圖, 是 PostgreSQL  實例維護的一個進程相關的視圖,是實時變化的。

  官方對他的定義是:每一行都表示一個系統進程,顯示與當前會話的活動進程的一些信息,比如當前回話的狀態和查詢等。

 

主要字段

Column Type Description
datid oid 后台連接的數據庫id(OID)
datname name 后台連接的數據庫名
pid integer 后代進程id(PID)
usesysid oid 連接到后台的用戶id
usename name 連接到后台的用戶名稱
application_name text 通過后台連接的應用程序名稱
client_addr inet 后台連接的IP地址。當該字段為空時,說明客戶端是在服務器主機上通過Unix的socket協議直連,或是數據庫內部進程(如autovacuum等)
client_hostname text 根據client_addr字段,通過DNS解析獲取的對應主機名稱. 但僅當log_hostname被開啟時才有效,並且只有通過IP協議連接時才能記錄到主機名;
client_port integer 后台連接使用的TCP端口號。當使用Unix-Socket協議連接時此值為-1。
backend_start timestamp with time zone 進程開始的時間,即客戶端連接到服務器的時刻。
xact_start timestamp with time zone 進程的當前事務開始執行的時間。若當前無活動事務,該值為null。
如果當前query是事務中的首次查詢,此項值應與query_start列相同.
query_start timestamp with time zone 當前事務中有在執行中的語句時,此值記錄該語句開始執行的時間;
若事務state不是active狀態,此值記錄的是上一次開始執行語句時間。(即每次開始執行新的語句時此值更新)
state_change timestamp with time zone 記錄進程中事務狀態發生改變的時刻;
waiting boolean 是否處於等待。當進程在等待解鎖時此值為t,否則為false
state text 表示后台進程的整體狀態。可能的值有:

  • active(活動):進程正在執行某個語句

  • idle(空閑): 進程正在等待客戶端的指令.

  • idle in transaction (事務空閑): 進程在處理事務過程中,但當前未執行任何語句.

  • idle in transaction (aborted)(事務空閑-退出):當事務中某個語句執行出錯的情況外,其余情況與idle in transaction相同.

  • fastpath function call(快通道函數調用): 后台正在執行某個快通道函數.

  • disabled(禁用): This state is reported if track_activities is disabled in this backend.

query text 后台進程最近(當前)執行的語句內容. 當狀態是 active時,它記錄的是正在執行的語句內容;否則記錄的是上一條語句執行的內容

 

主要作用

  平時遇到數據庫,查詢慢,或者數據庫故障問題,可以看看數據庫相關的一些狀態視圖,快速定位問題

-- 查詢閑置連接數。注意是否忘記關閉鏈接。 另外還可以查看連接數是不是過多等問題。
select count(*) from pg_stat_activity where state=‘idle’; 

-- 統計當前有多少活躍的客戶端
select 
  count(*) 
from 
  pg_stat_activity 
where 
  not pid = pg_backend_pid();

-- 查看一個后端進程運行了多久,以及它當前是否在等待
select 
  pid,state,CURRENT_TIMESTAMP - least(query_start,xact_start) AS runtime,substr(query,1,25) AS current_query
from 
  pg_stat_activity
where 
  not pid = pg_backend_pid();

-- 慢查詢
select
  pid, datname, usename, client_addr, application_name, state, backend_start, xact_start, xact_stay, query_start, query_stay, replace(query, chr(10), ' ') as query
from
    (select 
      pgsa.pid as pid, 
pgsa.datname as datname,
pgsa.usename as usename,
pgsa.client_addr client_addr,
pgsa.application_name as application_name,
pgsa.state as state, pgsa.backend_start as backend_start,
pgsa.xact_start as xact_start,
extract(epoch from (now() - pgsa.xact_start)) as xact_stay,
pgsa.query_start as query_start,
extract(epoch from (now() - pgsa.query_start)) as query_stay ,
pgsa.query as query from pg_stat_activity as pgsa
where
pgsa.state != 'idle' and pgsa.state != 'idle in transaction' and pgsa.state != 'idle in transaction (aborted)')
idleconnections
order by query_stay desc limit 5;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM