1. ホーム
  2. performance

[解決済み] PostgreSQL: pg_dump, pg_restore の性能改善

2023-04-10 03:07:44

質問

私が始めたころは pg_dump をデフォルトのプレーンフォーマットで使っていました。 無教養でした。

調査によって、時間とファイルサイズを改善するために pg_dump -Fc | gzip -9 -c > dumpfile.gz . 私は啓発されました。

いざ、データベースを新たに作ろうとすると

# create tablespace dbname location '/SAN/dbname';
# create database dbname tablespace dbname;
# alter database dbname set temp_tablespaces = dbname;

% gunzip dumpfile.gz              # to evaluate restore time without a piped uncompression
% pg_restore -d dbname dumpfile   # into a new, empty database defined above

私は不勉強だと思いました。復元には12時間かかり、データベースはそのほんの一部にしかならないのです。

# select pg_size_pretty(pg_database_size('dbname'));
47 GB

このデータベースは数テラバイトになることが予想されるので、今パフォーマンスを改善することを検討する必要があります。

ご教示ください。

どのように解決するのですか?

まず、ディスクセットアップから妥当な IO パフォーマンスを得ていることを確認します。次に、PostgreSQL のインストールが適切にチューニングされていることを確認します。特に shared_buffers が正しく設定されている必要があります。 maintenance_work_mem はリストア中に増加させる必要があります。 full_page_writes はリストア中はオフにする必要があります。 wal_buffers はリストア中に 16MB に増加する必要があります。 checkpoint_segments はリストア中に 16 のようなものに増やさなければなりません。無理なロギング (実行されたすべてのステートメントのロギングなど) は行わないようにしましょう。 auto_vacuum はリストア中は無効にしてください。

8.4を使用している場合、pg_restoreの--jobsオプションで並列リストアも試してみてください。