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

PostgreSQL 全库一致性逻辑备份,大表逻辑备份问题以及推荐解决方案 - 锁等待隐患,膨胀隐患

digoal 2019-08-04
1480

作者

digoal

日期

2019-08-04

标签

PostgreSQL , 锁等待隐患 , 膨胀隐患 , zfs , 全量 , 增量 , wal , 归档


背景

1、pg_dump开始备份数据之前需要依次进行锁表的操作, 锁级别为IN ACCESS SHARE MODE. 这个锁与AccessExclusiveLock冲突.

逻辑见代码:

src/bin/pg_dump/pg_dump.c

2、逻辑备份使用repeatable read隔离级别,备份开始时创建快照。

3、即使单表备份(非库级一致性备份),备份开始时也有快照信息。

postgres=# select * from pg_stat_activity where pid=41488; -[ RECORD 1 ]----+-------------------------------------- datid | 13591 datname | postgres pid | 41488 usesysid | 10 usename | postgres application_name | psql client_addr | client_hostname | client_port | -1 backend_start | 2019-08-04 11:20:26.296405+08 xact_start | 2019-08-04 11:26:07.185154+08 query_start | 2019-08-04 11:26:13.630502+08 state_change | 2019-08-04 11:26:19.021619+08 wait_event_type | Client wait_event | ClientRead state | idle in transaction backend_xid | backend_xmin | 123567280 快照信息 query | copy pgbench_accounts to '/dev/null'; backend_type | client backend

问题在哪?

问题

1、锁冲突隐患

备份期间,如果有会话要drop table,truncate table等操作(常见于分析业务),会被堵塞。(因为释放共享锁的操作在备份结束时发生)

备份开始前,如果有长时间持有DDL或其他排他锁的会话存在,备份会卡在加锁的步骤中。

2、长时间持有快照,数据库最老的快照之后所产生的垃圾都无法回收。如果备份期间产生大量的更新、删除操作吗,会有膨胀隐患。

《解读用户最常问的PostgreSQL垃圾回收、膨胀、多版本管理、存储引擎等疑惑 - 经典》

《膨胀点解释 - 全局catalog,库级catalog,普通表,wal文件 - 哪些垃圾(dead tuple), wal文件不能被回收reuse - 什么情况下可能膨胀》

大库推荐备份方式

1、standby + 文件系统快照备份 + 归档

2、全量文件备份 + wal归档

《PostgreSQL 最佳实践 - 块级增量备份(ZFS篇)验证 - recovery test script for zfs snapshot clone + postgresql stream replication + archive》

《PostgreSQL 最佳实践 - 块级增量备份(ZFS篇)双机HA与块级备份部署》

《PostgreSQL 最佳实践 - 块级增量备份(ZFS篇)单个数据库采用多个zfs卷(如表空间)时如何一致性备份》

《PostgreSQL 最佳实践 - 块级增量备份(ZFS篇)备份集有效性自动校验》

《PostgreSQL 最佳实践 - 块级增量备份(ZFS篇)方案与实战》

《zfs 快照增量恢复 vs PostgreSQL xlog增量恢复 速度》

《zfs 快照增量大小 vs PostgreSQL产生的XLOG大小》

《zfs 快照发送与接收》

参考

《PostgreSQL 逻辑备份与业务DDL的锁冲突案例 - PostgreSQL logical backup attention on lock and long time dump》

《PostgreSQL 两阶段(非库级一致性)逻辑备份 - PostgreSQL non-consistent backup script》

《PostgreSQL 逻辑备份一致性讲解 - Why pg_dump backup a database in consistent status》

PostgreSQL 许愿链接

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

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

PostgreSQL 解决方案集合

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

digoal's wechat

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

评论