web-dev-qa-db-ja.com

大規模なpostgresqlダンプの進行状況を追跡する方法

大きなdb(つまり1GB以上)でのpg_dump操作の進行状況を確認する方法はありますか? -vオプションを追加すると、画面にテキストがダンプされるだけですが、意味のある追跡情報は得られません。

14
abbood

TOCリストを使用すると、大まかな進行状況を確認できます。

まず、復元するオブジェクトのTOCリストを取得します。

pg_restore -l -f list.toc db.dump

次に、TOCリストを行ごとに表示し、詳細またはクエリpg_stat_activityの出力を比較して、TOCリストのどこにpg_restoreがあるかを確認できます。

ただし、これは概算です。 1つ目は、TOCリストの各項目の読み込みにかなり異なる時間がかかる可能性があるため(たとえば、スキーマは高速ですが、大きなテーブルのデータの読み込みやインデックスの構築はそうではありません)、-jを使用すると、項目が復元されます前のものが終了する前に。また、-Lを使用しない場合、pg_restoreがTOCリストに従っているかどうかは100%わかりませんが、そうだと思います。

9
MatheusOl

Unix/Linux環境に有効:

Pipe Viewer(pv)ユーティリティを使用して、バックアップの進行状況を追跡できます。 pvは、経過時間と転送されたバイト数の詳細でシェルをアニメーション化します。

以下は、大きなダンプファイルを小さなチャンクに保持するために、pvユーティリティとsplitユーティリティを使用してダンプする例です。後で別の場所に転送すると便利です。

# dump the PREDATA in clear text into a .PREDATA.SQL text file
pg_dump -s -o --section=pre-data  -n $schemaname $DatabaseConnString | pv | split -d -b $chunksize - $backuppath/$backupfilename".PREDATA.sql"

# dump the POSTDATA in clear text into a .PREDATA.SQL text file
pg_dump -s -o --section=post-data -n $schemaname $DatabaseConnString | pv | split -d -b $chunksize - $backuppath/$backupfilename".POSTDATA.sql"

# dump the DATA into the .DATA.dump compressed (binary) file
pg_dump -Fc   --section=data      -n $schemaname $DatabaseConnString | pv | split -d -b $chunksize - $backuppath/$backupfilename".DATA.dump"

欠点-pg_dump -Fdオプション(フォルダーにダンプ)が使用されている場合、このアプローチは機能しません。

2
R0B0T-B0BA