2017-08-24 19 views
1

私は1分から14時間までのさまざまな時間帯に異なる実行時間の範囲で実行される最適化されていないクエリを持っています。 CPU使用率、メモリ、およびデータベース上の他の同時負荷は同じままですが、そのような変動をもたらす可能性はありますか?真夜中に自動真空プロセスが実行され、午前中にパフォーマンスが大幅に向上することに注意してください。私の主張は、テーブルの断片化、デッドタプル、および多くの読み込みのために、同じテーブルの統計が変わり、異なる実行計画が生成されるということです。このアサーションを証明するために、現在実行中のクエリのクエリプランを取得したいと思います。実行前にクエリをEXPLAINにすることはできません。postgresqlで実行中のクエリの実行計画を取得するには?

+2

https://www.postgresql.org/docs/current/static/auto-explain.html –

+0

AFAIUでは、これもオプションではないデータベースの再起動が必要になります。さらに、これには、関係するクエリだけでなく、すべての長期実行クエリのクエリプランを生成するオーバーヘッドがあります。 –

+1

1:これは再起動を必要とせず、再ロードは最大でもあります。 2:PostgreSQLは、すべてのクエリのクエリプランを生成しなければなりません(準備ができていなければ、一度だけプランを作成します)。 3:ここで唯一のオーバーヘッドは最小限のクエリプランのログです。 auto_explain.log_min_durationを10000のようにシンプルに設定するだけで10秒間のクエリなどが必要です。 –

答えて

1

私はそれを働かせました。 postgresql.confには、ライブラリをプリロードするための2つの設定があります。最初のもの、shared_preload_librariesは、再起動しなければ動作しません。しかし、もう1つのsession_preload_librariesが表示されます。だから、それにこのラインを持っているのpostgresql.confを編集:

session_preload_libraries = 'auto_explain' 

その後リロード:

pg_ctl reload (or pg_ctlcluster 9.x main reload etc) 

を次にそれをオンにするために、データベースを変更する:その後、

alter database smarlowe set auto_explain.log_min_duration=1; 

そして、すべての新しい接続にはauto_explainedプランがあります。

あなたに最も合ったミリ秒の設定に時間を変更します。

関連する問題