#author("2022-02-01T01:41:36+00:00","default:wikiadmin","wikiadmin") #author("2022-03-17T01:03:57+00:00","default:wikiadmin","wikiadmin") -backupを極める -実行はpostgresユーザー前提なので、そうじゃない場合は-U postgresつける *DBサイズ確認 [#ucad605a] SELECT datname, pg_size_pretty(pg_database_size(datname)) FROM pg_database; *実行中の負荷 [#g2afd4e7] -どの形式でもPostgresのCPU使用率は100%程度まで上がる。 *テキスト形式 [#f9a89d27] pg_dump -d DB_NAME > dump.sql pg_dump -d DB_NAME | gzip > dump.sql.gz *Custom形式 [#vd2e8d18] -並列実行は不可能。アーカイブしてくれる -テキスト形式の1/10以下のサイズ。テキスト+gzipと同等。時間を考えるとこれ一択 -ただしバイナリ -リストアはpg_restoreが必要 pg_dump -Fc DB_NAME > /var/tmp/custom.dmp *ディレクトリ形式 [#ufa6c857] -jオプションで並列実行可能 pg_dump -j 1 -Fd /data/pgtest/ DB_NAME *時間計測 [#t128b22f] 4G程度で2分半あれば終わる。サイズは圧縮で200MBほど。 下の1億レコード追加18Gで9分。並列度をあげた場合は *大量データ作成 [#l2ee97b8] CREATE TABLE tasks ( id SERIAL NOT NULL, name VARCHAR(255) NOT NULL, created_at TIMESTAMP, updated_at TIMESTAMP, PRIMARY KEY (id) ); -10億レコードは数十ギガ消費し、1時間でも終わらなかったので一億レコードで挑戦。このデータで14G程度増量できた INSERT INTO tasks ( id ,name ,created_at ,updated_at ) SELECT i ,format('%s連番とても長いデータを造るためにがんばります', i) ,now() ,now() FROM generate_series(1, 100000000) as i;