9.3 版本开始,pg_dump 增加 -j njobs 参数支持并行导出功能,而之前版本的 pg_dump 备份时不支持这一功能,当然这个并行也有很多限制,之后会介绍到。
环境信息 
主机: 8 核 8GB
1.1 数据库信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22  
[pg93@server1 ~]$ psql psql (9.3 beta1) Type  "help"  for  help.   francs=> select pg_size_pretty(pg_database_size('francs')); pg_size_pretty ---------------- 5678  MB(1  row)    francs=> /dt+             List of relations Schema |  Name   | Type  | Owner  |  Size   | Description  --------+------------+-------+--------+------------+------------- francs | big_table1  | table  | francs  | 1613  MB  | francs  | big_table2  | table  | francs  | 1074  MB  |francs  | big_table3  | table  | francs  | 535  MB   |francs  | big_table4  | table  | francs  | 265  MB   |francs  | big_table5  | table  | francs  | 1073  MB  |francs  | test_1    | table  | francs  | 8192  bytes |francs  | test_json1  | table  | francs  | 16  kB   |(7  rows) 
 
 
并行备份测试 
2.1 普通备份
1  
pg_dump  -h  127.0 .0 .1  -E  UTF8  -Fc  -U  postgres  -v  francs  > francs .dmp  
 
 
备注:耗时 9分51秒; 备份文件大小 1046 MB 。
2.2 并行备份: -j 2
1  
pg_dump -h 127.0 .0 .1  -E UTF8 -Fd -j 2  -U postgres -v francs -f francs_j2  
 
 
备注:耗时 4分59秒; 备份目录大小 1045 MB。
2.2.2 备份过程中有两个 copy 进程。
1 2 3  
[pg93@server1 tf]$ ps -ef | grep COPY  pg93   15813 32478 42 13:53 ?    00:00:02 postgres: postgres francs 127.0.0.1(59247) COPY     pg93   15814 32478 40 13:53 ?    00:00:02 postgres: postgres francs 127.0.0.1(59248) COPY  
 
 
2.2.3 备份目录的文件
1 2 3 4 5 6 7 8 9 10 11  
[pg93@server1 tf]$ ll francs_j2 total 1.1 G    -rw-rw-r-- 1  pg93 pg93  52  May 17  13 :57  2751 .dat .gz  -rw-rw-r-- 1  pg93 pg93  74  May 17  13 :57  2753 .dat .gz  -rw-rw-r-- 1  pg93 pg93 368 M May 17  13 :56  2754 .dat .gz  -rw-rw-r-- 1  pg93 pg93 246 M May 17  13 :55  2755 .dat .gz  -rw-rw-r-- 1  pg93 pg93 124 M May 17  13 :57  2756 .dat .gz  -rw-rw-r-- 1  pg93 pg93 62 M May 17  13 :58  2757 .dat .gz  -rw-rw-r-- 1  pg93 pg93 246 M May 17  13 :57  2758 .dat .gz  -rw-rw-r-- 1  pg93 pg93 7.4 K May 17  13 :53  toc.dat  
 
 
备注:pg_dump 加了 -j 参数后,会对每张表生成一个已压缩的备份文件。
2.3 并行备份: -j 4
1  
pg_dump -h 127.0 .0 .1  -E UTF8 -Fd -j 4  -U postgres -v francs -f francs_j4  
 
 
备注:耗时 4分16秒 ; 备份目录大小 1045 MB。
2.3.2 对应有 4 个 COPY 进程
1 2 3 4 5  
[pg93@server1 tf]$ ps -ef | grep COPY  pg93   16280 32478 39 14:00 ?    00:00:03 postgres: postgres francs 127.0.0.1(55852) COPY     pg93   16283 32478 30 14:00 ?    00:00:03 postgres: postgres francs 127.0.0.1(55853) COPY     pg93   16285 32478 34 14:00 ?    00:00:03 postgres: postgres francs 127.0.0.1(55854) COPY     pg93   16286 32478 33 14:00 ?    00:00:03 postgres: postgres francs 127.0.0.1(55855) COPY  
 
 
备注:开启 4 个并行进程时,服务器明显负载升高,负载达到 6 左右。
2.4 总结
数据库大小: 5678 MB 
并行度 
消耗时间 
备份文件大小 
 
 
-j 2 
4分59秒 
1045 MB 
 
-j 4 
4分16秒 
1045 MB 
 
 
恢复测试 
加了 -j 参数的 pg_dump 最后产生的是目录,并且目录里存放的是已压缩的表文件,那么如何利用这个目录恢复数据库呢,接着测试。
3.1 创建新库 francs2
1 2 3 4 5 6 7 8 9 10 11  
postgres =# create database francs2;CREATE DATABASE    postgres =# grant all on database francs2 to  francs with grant option;GRANT    postgres =# /c francs2 francsYou are now connected to  database "francs2"  as user  "francs" .    francs2 => create schema francs;CREATE SCHEMA  
 
 
3.2 将备份文件导入库 francs2
1  
pg_restore -h 127.0 .0 .1  -d francs2 -U postgres -v -j 2  francs_j4  
 
 
 备注:francs_j4 是数据目录,之前版本这里需要指定文件,而这里指定的是目录。 
3.3 验证
1 2 3 4 5 6 7 8 9 10 11 12 13 14  
francs=> /c francs2 francs You are now connected to database "francs2"  as  user "francs" .    francs2=> /dt      List of relations Schema |  Name   | Type  | Owner   --------+------------+-------+-------- francs | big_table1  | table  | francs  francs | big_table2  | table  | francs  francs | big_table3  | table  | francs  francs | big_table4  | table  | francs  francs | big_table5  | table  | francs  francs | test_1    | table  | francs  francs | test_json1  | table  | francs   
 
 
备注:导入正常。
pg_dump 开启并行注意事项 
要开启 pg_dump 的并行参数,归档格式必须为 -Fd 。 
开启并行后,会产生一个数据目录,并在这个目录中产生已压缩的数据文件。 
开启并行后,运行过程中数据库负载会增加,但总体运行时间要短些。 
使用 9.3 版本的 pg_dump 并行备份 pre-9.2 版本需要特别注意,建议不要这么做。 
 
参考 
                                                        原创文章,作者:1402239773,如若转载,请注明出处:https://blog.ytso.com/tech/bigdata/237963.html