暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL pg_basebackup 并行压缩备份

digoal 2016-01-24
1458

作者

digoal

日期

2016-01-24

标签

PostgreSQL , pg_basebackup , stdout , 压缩 , 并行压缩


背景

在使用pg_basebackup备份数据库时,可以选择压缩或不压缩。

当我们使用非压缩格式时,如果你的块设备性能很不错,这种单进程的拷贝方式可能无法将块设备的性能发挥出来,例如现在企业级的SSD可以达到2GB/s的读写性能。而使用单进程拷贝小文件可能只能达到300MB/s,这对于备份一个比较大的数据库来说,速度是远远不够的。如果能把SSD的性能发挥出来,速度可以提升6倍。

所以pg_basebackup是不是能支持并行呢?

现在社区版本并没有提供并行备份的功能,我们得想想其他方法。

我们首先来看看pg_basebackup的工作原理:

创建检查点,打开FPW,创建备份标签(存储检查点位置,时间等信息),通过流复制协议与数据库建立连接,WAL Sender进程向pg_basebackup发送数据库物理文件,pg_basebackup接收到文件后写入目标位置(压缩或不压缩)。

这里有几个地方可能成为瓶颈:

1. wal sender端,单进程,可能慢(实际还好)。

```
pg_basebackup -F t -D - >/dev/null

测试达到1.2 GB/s

(块设备 blockdev --setra 16384 /dev/...)

此时块设备的UTIL为66%,说明速度还可以上来。需要并行。
复制

```

2. 网络,单线程拷贝,可能成为瓶颈。

10GB 网卡, 大包速度可以达到 1.25 GB/s

3. pg_basebackup端,写入数据时可能成为瓶颈。

pg_basebackup -F t -D - > /dege.zzz/backup/tar 测试达到300 MB/s 是本文的瓶颈。本文将使用并行压缩来减轻这里的写瓶颈,或者升级块设备,使用写入性能更好的块设备。

PostgreSQL除了 pg_basebackup来备份,还可以使用这种方法:

1. pg_start_backup('test');

2. copy files;

3. pg_stop_backup();

如果使用这种方法,我们能找到提升的点吗?

默认拷贝文件使用的是cp命令。或者tar压缩整个目录(需要注意表空间的软链接)。

CP或tar有没有可以并行的呢?当然可以。

这里有几个参考:

http://www.zlib.net/pigz/

https://en.wikipedia.org/wiki/Bzip2

http://lbzip2.org/quickstart

http://compression.ca/pbzip2/

用一个1TB的数据库进行测试:

清除缓存

sync; echo 3 > /proc/sys/vm/drop_caches

1、使用pg_basebackup -F p 即不压缩,速度是269MB/s

2、使用pg_basebackup -F c -z 即归档且压缩模式,速度小于269MB/s

3、使用pg_basebackup -F c 归档不压缩模式,速度269MB/s

4、使用cp ,不压缩,速度 399MB/s

5、使用cp ,并行压缩,以pigz为例:

date +%F%T; tar -cf /digoal/backup/test.tar.gz --use-compress-prog=pigz /digoal/pgdata; date +%F%T;

速度可以达到 509MB/s,但是很耗CPU。

6、接下来要做的就是把pg_basebackup原来使用的gzip替换成pigz。

使用管道即可。

pg_basebackup -F t -D - | /digoal/pigz-2.3.3/pigz -6 -p 32 > /digoal/backup/test1.tar.gz

速度,428MB/s , 但是很耗CPU。

不压缩,流式备份:

pg_basebackup -D /digoal/backup -F p 备份结果集大小 819 GB 备份速度 269 MB/s 磁盘使用率 51% CPU使用率 1核

并行压缩,流式备份:

pg_basebackup -F t -D - | /digoal/pigz-2.3.3/pigz -6 -p 24 > /digoal/backup/test1.tar.gz 备份结果集大小 46 GB 备份速度 428 MB/s 磁盘使用率 28.6% CPU使用率 24核(可配置)

不压缩,拷贝备份:

(备份大小819GB, 399MB/s) cp -r $PGDATA/ /digoal/backup/ 备份结果集大小 819 GB 备份速度 399 MB/s 磁盘使用率 44.8% CPU使用率 1核

并行压缩,拷贝备份

tar -cf /digoal/backup/test.tar.gz --use-compress-prog=pigz /digoal/pgdata 备份结果集大小 46 GB 备份速度 509 MB/s 磁盘使用率 33.8% CPU使用率 24核(可配置)

PostgreSQL 许愿链接

您的愿望将传达给PG kernel hacker、数据库厂商等, 帮助提高数据库产品质量和功能, 说不定下一个PG版本就有您提出的功能点. 针对非常好的提议,奖励限量版PG文化衫、纪念品、贴纸、PG热门书籍等,奖品丰富,快来许愿。开不开森.

9.9元购买3个月阿里云RDS PostgreSQL实例

PostgreSQL 解决方案集合

德哥 / digoal's github - 公益是一辈子的事.

digoal's wechat

文章转载自digoal,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论