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


13

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

Answers:


7

您可以使用目录列表看到一个粗略的进展。

首先,获取要还原的对象的目录列表:

pg_restore -l -f list.toc db.dump

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

不过,这只是一个粗略的估计。首先,因为TOC列表中的每个项目加载时间可能确实不同(例如,架构速度很快,但是加载大表和构建索引的数据却不然),如果使用-j,则将还原一个项目在上一个完成之前。另外,如果您不使用-L,我不确定100%pg_restore是否准确地遵循了TOC列表,但我认为确实如此。


2
我对这个答案感到困惑-原始问题指定转储数据库,但是此解决方案指定恢复数据库
jaydel

2

适用于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 .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选项(转储到文件夹),则此方法无效。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.