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


13

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

回答:


7

TOCリストを使用して、大まかな進捗を確認できます。

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

pg_restore -l -f list.toc db.dump

次に、TOCリストを1行ずつ表示し、verboseまたはquery pg_stat_activityの出力を比較して、TOCリストのどこにpg_restoreがあるかを確認できます。

ただし、概算です。最初に、TOCリストの各アイテムのロードに実際に異なる時間がかかる場合があるため(たとえば、スキーマは高速ですが、大きなテーブルのデータのロードとインデックスの構築はそうではありません)、-jを使用すると、アイテムが復元されます前のものが終了する前に。また、-Lを使用しない場合、pg_restoreがTOCリストに正確に従うかどうかは100%わかりませんが、そうだと思います。


私はこの答えに混乱しています。元の質問ではデータベースのダンプを指定していますが、このソリューションではデータベースの復元を指定しています
-jaydel

2

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オプション(フォルダーにダンプ)を使用すると、このアプローチは機能しません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.