8

postgres で巨大なクエリを実行していて、結合テーブルの 1 つが常にシーケンシャル スキャンを実行していました。制約列にインデックスがあり、postgres はそれを使用しませんでした。を実行したところVACUUM ANALYZE、postgres クエリ プランは、現在インデックス スキャンが使用されていることを示しています。

私の質問は、を実行する最も効率的な方法は何VACUUM ANALYZEですか? テーブルをロックしますか?VACUUM ANALYZEもしそうなら、ライブ本番テーブルでどのように実行しますか?

4

2 に答える 2

6

分析のみを実行でき、vacuum も実行する必要はありません。構文は次のとおりです。

ANALYZE [ VERBOSE ] [ table_name [ ( column_name [, ...] ) ] ]

ドキュメントには次のように記載されています。

ANALYZE は、ターゲット テーブルの読み取りロックのみを必要とするため、テーブルの他のアクティビティと並行して実行できます。

詳細については、次を参照してください。

http://www.postgresql.org/docs/9.4/static/sql-analyze.html

https://wiki.postgresql.org/wiki/Introduction_to_VACUUM,_ANALYZE,_EXPLAIN,_and_COUNT

バキュームはロックテーブルを分析しますか?

いいえ、テーブルをロックするのは「FULL VACUUM」コマンドです。

于 2016-05-16T21:05:38.130 に答える