#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;

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS