如何跟踪大型 postrgresql 转储的进度

abb*_*ood 21 postgresql dump postgresql-9.2 pg-dump

有没有办法查看pg_dump大数据库(即> 1GB)上的操作进度?添加-v选项只会在屏幕上转储文本,但不会给我太多有意义的跟踪信息。

R0B*_*0BA 12

适用于 Unix/Linux 环境:

Pipe Viewer (pv) 实用程序可用于跟踪备份进度。pv 为您的 shell 提供有关经过时间和传输字节的详细信息的动画。

下面是使用 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 .POSTDATA.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"
Run Code Online (Sandbox Code Playgroud)

缺点 - 如果使用 pg_dump -Fd 选项(转储到文件夹),则此方法不起作用。


Mat*_*sOl 11

您可以使用 TOC 列表查看粗略的进度。

首先,获取要恢复的对象的TOC列表:

pg_restore -l -f list.toc db.dump
Run Code Online (Sandbox Code Playgroud)

然后,您可以逐行查看TOC 列表并比较verbose 的输出或查询pg_stat_activity 以查看TOC 列表中pg_restore 的位置。

不过这只是一个粗略的估计。首先是因为 TOC 列表中的每个项目可能需要真正不同的时间来加载(例如,模式很快,但加载大表和构建索引的数据却不是),如果您使用 -j,您将有一个项目正在恢复在上一个完成之前。另外,如果您不使用 -L,我不能 100% 确定 pg_restore 是否完全遵循 TOC 列表,但我认为确实如此。

  • 我对这个答案感到困惑——原始问题指定转储数据库,但此解决方案指定恢复数据库 (8认同)