2009-10-06 17 views
43

postgresで行われたクエリの履歴を取得することは可能ですか?それは各クエリにかかる時間を得ることが可能ですか?私は現在、私が取り組んでいるアプリケーションで遅いクエリを識別しようとしています。あなたはpsqlを使用している場合postgresで行われたクエリの履歴を取得することは可能ですか?

私はPostgresの8.3.5

+3

これはSQL固有の質問ではないため、ロールバックタグが変更されます。 –

+1

http://stackoverflow.com/questions/722221/how-to-log-postgres-sql-queriesを参照してください。 –

答えて

52

データベース自体には歴史がありませんを使用している、あなたはそこにあなたのコマンド履歴を参照するには、「\ s」は使用することができます。

postgresql.confファイルにlog_statementを設定すると、将来のクエリやその他の操作をログファイルに追加できます。あなたがおそらく代わりにしたいのはlog_min_duration_statementです。これを0に設定すると、すべてのクエリとその期間がログに記録されます。アプリを公開すると役立つことがあります。これを高い値に設定すると、最適化に役立つ長期実行クエリのみが表示されます(そこにあるクエリでEXPLAIN ANALYZEを実行すると、遅い)。

この分野でもうひとつ知っておくべきことは、psqlを実行して "\ timing"と言うと、それ以降のすべてのステートメントがどれくらいの時間かかるかを示します。ですから、このようになりますSQLファイルを持っている場合:

\timing 
select 1; 

あなたは右の旗でそれを実行し、それがかかった時間と交互にそれぞれの文を参照してくださいすることができます。あなたが設定ファイルを変更するとは違って、それを使用して、データベースのスーパーユーザである必要はありませんし、あなたが新しいを開発している場合、使用する方が簡単ですので、これは便利です

$ psql -ef test.sql 
Timing is on. 
select 1; 
?column? 
---------- 
     1 
(1 row) 

Time: 1.196 ms 

:ここではどのように、どのような結果は次のようになりますコードをテストしたいと思っています。

2

あなたが遅いクエリを特定したい場合は、より方法はlog_min_duration_statement設定(postgresql.confの中またはALTER DATABASEのセットでごとのデータベース設定)を使用することです。

データをログに記録すると、pgFouineや独自のanalyzerなどの特殊なツールを使用することができますが、適切なドキュメントはありませんが、これにもかかわらず、非常にうまく動作します。 https://github.com/dhamaniasad/awesome-postgres#utilities

は公式サイトを参照してください、しかしPostgresのログに必要なデータをキャプチャするために事前にいくつかの追加設定が必要です。また、ここに記載されている -

0

pgBadgerは別のオプションです。 UINavicatを使用してそれらのためのFYI

0

あなたが履歴を保存するようwhereにファイルを利用するために、あなたの好みを設定しなければなりません。

これが空白の場合、Navicatは空白になります。

enter image description here

PS:私は、Navicatはまたはそれの関連会社への関連付けまたはに何の所属を持っていません。ちょうど助けを探しています。

関連する問題