PostgreSQL查詢長連接


apple=# select pid, backend_start, xact_start, query_start, waiting, state, backend_xid from pg_stat_activity where backend_xid is not null and now() - xact_start > interval '1 min';
-[ RECORD 1 ]-+------------------------------
pid           | 14604
backend_start | 2018-12-04 15:06:19.306234+08 -- 連接創建時間
xact_start    | 2018-12-04 16:08:25.528639+08 -- 事務begin時間
query_start   | 2018-12-04 16:09:03.921005+08 -- 事務中最近的查詢開始時間,一個事務內有多個查詢時,只記錄最近的一個
waiting       | f                  -- 是否在等待,有鎖時這里為t
state         | idle in transaction           -- 是否空閑,且仍然未提交
backend_xid   | 718176                        -- 當前事務的id,即xid。如果連接創建了,沒有做任何操作,或者僅僅begin了,那么這里是空的;但是如果begin了,前面的xact_start就會記錄事務開始時間。 另外,僅查詢不會產生。

 

往往我們查看backend_xid不為空,的state為idle in transaction的連接,分析他的三個時間,來判斷是不是長事務。

 

開兩個連接,在一個連接中鎖住表,另外一個連接查詢表,可以看到查詢的表waiting狀態為t:

apple=# select pid, backend_start, xact_start, query_start, waiting, state, backend_xid from pg_stat_activity where backend_xid is null and now() - backend_start > interval '1 min';
-[ RECORD 1 ]-+------------------------------
pid           | 14604
backend_start | 2018-12-04 15:06:19.306234+08
xact_start    | 2018-12-04 16:23:23.420563+08
query_start   | 2018-12-04 16:23:23.420563+08
waiting       | t
state         | active
backend_xid   |
-[ RECORD 2 ]-+------------------------------
pid           | 15509
backend_start | 2018-12-04 15:47:22.826488+08
xact_start    | 2018-12-04 16:23:26.41356+08
query_start   | 2018-12-04 16:23:26.41356+08
waiting       | f
state         | active
backend_xid   |
-[ RECORD 3 ]-+------------------------------
pid           | 16235
backend_start | 2018-12-04 16:20:22.398526+08
xact_start    | 2018-12-04 16:23:04.552078+08
query_start   | 2018-12-04 16:23:18.629458+08
waiting       | f
state         | idle in transaction
backend_xid   |


免責聲明!

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



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