2012-09-28 18 views
19

非常に長く実行されるselectクエリがあります。どのくらい長く実行されるかなど、そのクエリのステータスはどのように取得されますか?テーブルからデータにアクセスしているかどうか。postgresqlデータベースで実行中のクエリのステータスを取得する方法

注:pg_stat_activityごとに、クエリはアクティブとして実行されています。待機状態ではありません。 Oracleと同様に、ソース/ターゲットと処理状況を見ることができます。postgresqlにはこのようなものがありますか?

+0

上記の質問では、クエリの完了時刻が必要です。 pg_stat_activityビューは、アクティブなクエリ、データベース、ユーザの詳細のみを与えます。 pg_stat_activityには実行中のクエリの完了時刻が含まれていません。 –

答えて

27

stats_command_stringを有効にすると、pg_stat_activityテーブルには現在アクティブなすべてのクエリ文字列が保持されます。最も単純なクエリは、現在のすべてのクエリ文字列とそれらが参照するデータベース、およびそのクエリを処理するプロセスのプロセスID(PID)を表示します。

SELECT datname,pid,state,query FROM pg_stat_activity 

例:

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) 

各行pg_stat_activityのは、(PostgreSQLは接続ごとに1つのサーバー・プロセスを使用して)1つのPostgreSQLのプロセスを表します。

現在クエリを実行していないプロセスであれば、<IDLE>がcurrent_queryとして表示されます。

はチェックthis参照

+0

私は上記の質問で完了時間が必要です。アクティブなクエリではなく、実行中のデータベースまたはユーザーです。 –

+0

私は上記の質問の質問の完了時間が必要です。 pg_stat_activityビューは、アクティブなクエリ、データベース、ユーザの詳細のみを与えます。 pg_stat_activityには実行中のクエリの完了時刻が含まれていません。 –

+8

このクエリのセマンティクスは、PostgreSQL 9.3(おそらく以前のバージョン)では明らかに変更されています。これは、 'SELECT datname、pid、state、query FROM pg_stat_activity;'(クエリがアクティブかどうかを判断する新しいカラムに注意してください)のようになります。 –

8

のためにこれはまだ実行することはできませんが、the TODOです。

1

@Anshuの回答に基づいて私が使用しています:

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

我々はpostgresのデータベースに関してクエリログを見つけることができます。

select * 
from pg_stat_activity 
where datname = 'yourdatabasename' 

これは、データベースのアクティブなクエリログを提供します。

関連する問題