web-dev-qa-db-ja.com

インデックスはpg_restoreで転送されますか

回答済みの他の質問が否定的に表示されます(つまり、標準のpg_restoreではインデックスが転送されません)。ただし、最近のダンプ/復元で実行されたようで、本当に転送されたかどうかはわかりません。

データベースをPostgreSQL 9.3から9.4.5に移行し、そのためにダンプ/復元を使用しました。

以下は使用されるコマンドです:

Sudo -u postgres pg_dump -h localhost -p 5432 -d nominatim -F d -f dump/postgres/backup -j 20
Sudo -u postgres pg_restore --create --dbname=nominatim --exit-on-error -h localhost -p 5432 -F d -j 7 dump/postgres/backup

ダンプと復元は成功しました(エラーなし)。

復元中にautovacuumをオフに設定したので、psql内から、および復元されたデータベースに接続しているときにanalyze(パラメーターなし)を実行しました。

最初に気付いたのは、9.3ではデータディレクトリが約860 GBでしたが、9.4では約680 GBでした。 9.4ははるかに効率的ですか?

次に気づいたのは、データベースのインデックスが表示されていることです。

nominatim=# \d country_name
                   Table "public.country_name"
            Column             |         Type         | Modifiers 
-------------------------------+---------------------------------    
country_code                  | character varying(2) |   
name                          | hstore               |   
country_default_language_code | character varying(2) |   
partition                     | integer              |  

Indexes:
        "idx_country_name_country_code" btree (country_code)


nominatim=# \d idx_country_name_country_code
    Index "public.idx_country_name_country_code"
    Column    |         Type         |  Definition  
--------------+----------------------+--------------
 country_code | character varying(2) | country_code

btree, for table "public.country_name"


nominatim=# select * from pg_indexes where tablename = 'country_name';
 schemaname |  tablename   |           indexname           | tablespace |                                       indexdef                                        
------------+--------------+-------------------------------+------------+---------------------------------------------------------------------------------------
 public     | country_name | idx_country_name_country_code |            | CREATE INDEX idx_country_name_country_code ON country_name USING btree (country_code)
(1 row)

それでもインデックスを再作成する必要がありますか、それとも何らかの方法でインデックスを作成しましたか、それとも単にインデックス定義を見ているだけですか?ダンプ/復元のより良い管理、私のインデックスのチェックなどに関するさらなるヒントは間違いなくありがたいです。

7
Brooks

インデックスはpg_restoreで転送されますか?
否定的に回答された他の質問が表示されます(つまり、インデックスが標準のpg_restoreで転送されません)

それは誤解のようです。 (すべてのデータを含む)インデックス自体は、ダンプではnotです。それを再作成するコマンドだけです。したがって、インデックスは「転送」されますが、実際には、膨らみや死んだタプルなしで、元の状態で再作成されます

それでもインデックスを再作成する必要がありますか?

いいえ。復元後は、すべてのインデックスが完全な状態になっています。 REINDEXは必要ありません。 ANALYZEは、「ダンプの復元」の章のマニュアルで推奨されているように、 でも意味があります。

バックアップを復元した後、各データベースでANALYZEを実行して、クエリオプティマイザーが有用な統計を取得できるようにすることをお勧めします。

そして最後に:

9.4ははるかに効率的ですか?

いいえ、一般的ではありません。まあ、GINインデックスのサイズは大幅に削減されました。ただし、表示されるのは、おそらくすべてのテーブルとインデックス(システムテーブルを含む)から膨張を削除した場合の影響です。

13