2012-09-28 35 views
19

Tôi có một truy vấn chọn chạy rất dài. Làm thế nào tôi sẽ nhận được trạng thái của truy vấn đó, chẳng hạn như nó sẽ chạy trong bao lâu? Cho dù đó là truy cập dữ liệu từ các bảng hay không.Cách nhận trạng thái truy vấn đang chạy trong cơ sở dữ liệu postgresql

Lưu ý: Theo số pg_stat_activity truy vấn đang hoạt động. Không ở trạng thái chờ đợi. Giống như trong Oracle, chúng ta có thể thấy nguồn/đích và trạng thái prcessing của một truy vấn - có điều gì giống như thế này trong postgresql không?

+0

Tôi cần thời gian hoàn thành truy vấn trong câu hỏi trên. Chế độ xem pg_stat_activity chỉ cung cấp các truy vấn, cơ sở dữ liệu, chi tiết người dùng đang hoạt động. pg_stat_activity không chứa thời gian hoàn thành của truy vấn đang chạy. –

Trả lời

27

Khi stats_command_string được bật, bảng pg_stat_activity chứa tất cả các chuỗi truy vấn hiện đang hoạt động. Truy vấn đơn giản nhất sẽ hiển thị tất cả các chuỗi truy vấn hiện tại cùng với cơ sở dữ liệu mà chúng tham chiếu và ID tiến trình (PID) của quá trình phân phối truy vấn đó.

SELECT datname,pid,state,query FROM pg_stat_activity 

Ví dụ:

database1=# SELECT datname,procpid,current_query FROM pg_stat_activity ORDER BY procpid ; 
    datname | procpid | current_query 
---------------+---------+--------------- 
mydatabaseabc | 2587 | <IDLE> 
anotherdb  | 15726 | SELECT * FROM users WHERE id=123 ; 
mydatabaseabc | 15851 | <IDLE> 
(3 rows) 

Mỗi hàng pg_stat_activity đại diện cho một quá trình PostgreSQL (PostgreSQL sử dụng một quá trình máy chủ cho mỗi kết nối).

Mọi quá trình hiện không thực hiện bất kỳ truy vấn nào sẽ hiển thị <IDLE> làm current_query.

Kiểm tra this để tham khảo

+0

Tôi cần thời gian hoàn thành trong câu hỏi trên. Không phải truy vấn hoạt động, db mà nó đang chạy hoặc người dùng. –

+0

Tôi cần thời gian hoàn thành truy vấn trong câu hỏi trên. Chế độ xem pg_stat_activity chỉ cung cấp các truy vấn, cơ sở dữ liệu, chi tiết người dùng đang hoạt động. pg_stat_activity không chứa thời gian hoàn thành của truy vấn đang chạy. –

+8

Ngữ nghĩa của truy vấn này dường như đã thay đổi trong PostgreSQL 9.3 (có thể sớm hơn). Bây giờ nó trông giống như 'SELECT datname, pid, state, query FROM pg_stat_activity;' (lưu ý cột mới để xác định nếu truy vấn đang hoạt động). –

1

Dựa trên câu trả lời @Anshu Tôi đang sử dụng:

SELECT datname, pid, state, query, age(clock_timestamp(), query_start) AS age 
FROM pg_stat_activity 
WHERE state <> 'idle' 
    AND query NOT LIKE '% FROM pg_stat_activity %' 
ORDER BY age; 
0

chúng ta có thể tìm thấy các bản ghi truy vấn đối với các cơ sở dữ liệu trong postgres với.

select * 
from pg_stat_activity 
where datname = 'yourdatabasename' 

Thao tác này sẽ cung cấp nhật ký truy vấn hoạt động.

Các vấn đề liên quan