热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PostgreSQLWAL压缩归档变得越来越重要案

2020年2月13日作者:乔宾·奥古斯丁JobinAugustine是PostgreSQL专

2020213

作者:乔宾·奥古斯丁

Jobin AugustinePostgreSQL专家和开放源代码倡导者,在PostgreSQLOracle和其他数据库技术方面担任顾问、架构师、管理员、作家和培训师,有超过18年的工作经验。

他一直是开源社区的积极参与者,他的主要关注领域是数据库性能和优化。他是各种开放源代码项目的贡献者,并且是活跃的博客作者,并且喜欢用C ++Python编写代码。

Jobin拥有计算机应用硕士学位,并于2018年以高级支持工程师的身份加入Percona

翻译:魏波编辑:孙祥斌

前言

随着硬件和软件的发展,数据库系统的瓶颈也在发生变化。许多旧问题可能会消失,但同时引发新的问题。

旧局限性问题

通常,CPU和内存是一个限制。十多年前,具有4个核心的服务器属于“高端”服务器,作为DBA,最大的担心是如何管理可用资源。对于像我这样的老DBA,Oracle尝试使用RAC从多个主机为单个数据库池化CPU和内存,这是解决该问题的伟大尝试。
然后是存储速度限制的日子。它是由多核和多线程处理器的普及以及内存大小和总线速度的提高触发的。企业试图使用复杂的SAN驱动器,带有缓存的专业存储来解决。直到现在,企业开始越来越多地转向NVMe驱动器。

最近,我们开始注意一个新的瓶颈,这已成为许多数据库用户的难题。随着单主机服务器功能的增强,它开始处理大量事务。有一些系统在几分钟之内就可以生成数千个WAL文件,而且有一些案例表明,将WAL归档到更便宜,速度更慢的磁盘系统上无法赶上WAL的产生量。

为了增加更多的复杂性,许多组织更喜欢在低带宽网络上存储WAL存档。(Postgres归档中存在一个固有的问题,即如果滞后,则滞后的趋势会更大,因为存档过程需要在.ready文件中进行搜索。在此不再讨论。

在此博客文章中,请您注意:如果还没有压缩WAL,可以很容易地实现压缩WAL,以及查询监视归档差距的查询。

压缩PostgreSQLWAL

归档之前压缩WAL的需求日益增加。幸运的是,大多数PostgreSQL备份工具(例如pgbackrest wal-g等)已经解决了这一问题。在archive_command   调用这些工具,默默地为用户归档日志。

例如,在pg_backrest中,我们可以指定archive_command,该命令在幕后使用gzip。

PgSQL

    ALTERSYSTEMSETarchive_command='pgbackrest  --stanza=mystanza 
    archive-push %p';   

    或者在WAL-G中,我们可以指定:

    PgSQL

      ALTERSYSTEMSETarchive_command='WALG_FILE_PREFIX=/path/to/archive
      /usr/local/bin/wal-g wal-push %p';

      这将对WAL文件进行lz4压缩。

      但是,如果我们不使用任何特定的备份工具进行WAL压缩以进行归档,该怎么办?

      我们仍然可以使用Linux工具(如gzip或bzip等)压缩WAL。默认情况下,大多数Linux安装中都提供Gzip,因此配置它很容易。

        alter system set archive_command = '/usr/bin/gzip -c %p >
        /home/postgres/archived/%f.gz';

        但是,在WAL的所有压缩选项中,7za是最有趣的,它尽可能快地提供了最高的压缩率,这是产生高WAL的系统中的主要标准。您可能必须显式安装7za,它是额外存储库7zip软件包的一部分。

        在CentOS7上是:

          sudo yum install epel-release
          sudo yum install p7zip

          在Ubuntu上是:

            sudo apt install p7zip-full

            现在,我们能够像这样指定archive_command:

            Shell

              postgres=# alter system set archive_command = '7za a -bd -mx2 -bsp0 -bso0
              /home/postgres/archived/%f.7z %p';
              ALTER SYSTEM

              在我的测试系统中,可以看到小于200kb的已归档WAL文件。大小可以根据WAL的内容而变化,这取决于数据库上事务的类型。

              Shell

                -rw-------.1postgres postgres <strong>197Kstrong> Feb 612:13
                0000000100000000000000AA.7z
                -rw-------.1postgres postgres <strong>197Kstrong> Feb 612:13
                0000000100000000000000AB.7z
                -rw-------.1postgres postgres <strong>198Kstrong> Feb 612:13
                0000000100000000000000AC.7z
                -rw-------.1postgres postgres <strong>196Kstrong> Feb 612:13
                0000000100000000000000AD.7z
                -rw-------.1postgres postgres <strong>197Kstrong> Feb 612:13
                0000000100000000000000AE.7z

                将16MB的文件压缩到千字节的速度肯定会节省网络带宽和存储,同时解决归档落后的问题。

                恢复WAL

                存档并获得最高的压缩率只是其中一部分,我们也应该能够在需要时恢复它们。备份工具提供了自己的还原命令选项。例如,pgbackrest可以使用archive-get:

                Shell

                  restore_command = 'pgbackrest --stanza=demo archive-get %f "%p"'

                   

                  如果您选择使用gzip进行手动压缩,我们可以在restore_command中使用gunzip实用程序,如下所示:

                  Shell

                    gunzip -c /home/postgres/archived/%f.gz > %p

                    如果您已经开始使用PostgreSQL 12,则可以使用ALTER SYSTEM设置此参数:

                    Shell

                      postgres=# alter system set restore_command = 'gunzip -c
                      /home/postgres/archived/%f.gz > %p';
                      ALTER SYSTEM

                      或者,对于上述的7za,您可以使用以下方法:

                      Shell

                        postgres=# alter system set restore_command = '7za x -so
                        /home/postgres/archived/%f.7z > %p';
                        ALTER SYSTEM

                        但是,与archive_command更改不同,restore_command更改要求您重新启动备用数据库。

                        监控存档进度

                        当前的WAL归档文件可以从pg_stat_archiver状态获得,但是使用WAL文件名来找出差距有些麻烦。我用来查找WAL存档滞后的示例查询是:

                        PgSQL

                          select
                          pg_walfile_name(pg_current_wal_lsn()),last_archived_wal,last_failed_wal,
                          ('x'||substring(pg_walfile_name(pg_current_wal_lsn()),9,8))::bit(32)::int*
                          256+
                          ('x'||substring(pg_walfile_name(pg_current_wal_lsn()),17))::bit(32)::int
                          -
                          ('x'||substring(last_archived_wal,9,8))::bit(32)::int*256-
                          ('x'||substring(last_archived_wal,17))::bit(32)::int
                          asdifffrompg_stat_archiver;

                          需要注意的是,当前的WAL和要归档的WAL都在同一时间轴上,从而使查询正常工作。我们很少会遇到与生产环境不同的情况。因此,在监视PostgreSQL服务器的WAL归档时,此查询可能会很有帮助。


                          I Love PG

                          关于我们

                          中国开源软件推进联盟PostgreSQL分会(简称:PG分会)于2017年成立,由国内多家PG生态企业所共同发起,业务上接受工信部产业发展研究院指导。PG分会致力于构建PG产业生态,推动PG产学研用发展,是国内一家PG行业协会组织。



                          欢迎投稿

                          做你的舞台,show出自己的才华 。

                          投稿邮箱:partner@postgresqlchina.com

                                                         

                                                           ——愿能安放你不羁的灵魂


                          技术文章精彩回顾




                          PostgreSQL学习的九层宝塔
                          PostgreSQL职业发展与学习攻略
                          搞懂PostgreSQL数据库透明数据加密之加密算法介绍
                          一文读懂PostgreSQL-12分区表
                          PostgreSQL源码学习之:RegularLock
                          Postgresql源码学习之词法和语法分析
                          PostgreSQL buffer管理
                          最佳实践—PG数据库系统表空间重建
                          PostgreSQL V12中的流复制配置
                          2019,年度数据库舍 PostgreSQL 其谁?
                          PostgreSQL使用分片(sharding)实现水平可扩展性
                          一文搞懂PostgreSQL物化视图
                          PostgreSQL原理解析之:PostgreSQL备机是否做checkpoint
                          PostgreSQL复制技术概述

                          PG活动精彩回顾




                          见证精彩|PostgresConf.CN2019大会盛大开幕
                          PostgresConf.CN2019大会DAY2|三大分论坛,精彩不断
                          PostgresConf.CN2019培训日|爆满!Training Day现场速递!
                          「PCC-Training Day」培训日Day2圆满结束,PCC2019完美收官
                          创建PG全球生态!PostgresConf.CN2019大会盛大召开
                          首站起航!2019“让PG‘象’前行”上海站成功举行
                          走进蓉城丨2019“让PG‘象’前行”成都站成功举行
                          中国PG象牙塔计划发布,首批合作高校授牌仪式在天津举行
                          PostgreSQL实训基地落户沈阳航空航天大学和渤海大学,高校数据库课改正当时
                          群英论道聚北京,共话PostgreSQL
                          相聚巴厘岛| PG Conf.Asia 2019  DAY0、DAY1简报
                          相知巴厘岛| PG Conf.Asia 2019 DAY2简报
                          相惜巴厘岛| PG Conf.Asia 2019 DAY3简报
                          独家|硅谷Postgres大会简报
                          全球规模最大的PostgreSQL会议等你来!

                          PG培训认证精彩回顾




                          关于中国PostgreSQL培训认证,你想知道的都在这里!
                          首批中国PGCA培训圆满结束,首批认证考试将于10月18日和20日举行!
                          中国首批PGCA认证考试圆满结束,203位考生成功获得认证!
                          中国第二批PGCA认证考试圆满结束,115位考生喜获认证!
                          请查收:中国首批PGCA证书!
                          重要通知:三方共建,中国PostgreSQL认证权威升级!
                          一场考试迎新年 | 12月28日,首次PGCE中级认证考试开考!
                          近500人参与!首次PGCE中级、第三批次PGCA初级认证考试落幕!




                          推荐阅读
                          • 从分布式数据库选型的第一件事谈起
                            本文很长,谨慎阅读现在在我们的面前摆着太多的分布式数据库可以让我们选择,那么如果我想先让 ... [详细]
                          • 开发笔记:深度探索!Android之OkHttp网络架构源码解析
                            篇首语:本文由编程笔记#小编为大家整理,主要介绍了深度探索!Android之OkHttp网络架构源码解析相关的知识,希望对你有一定的参考价值。 ... [详细]
                          • kafkamanager(cmak)安装及使用
                            1.软件下载kafka-manager工具目前改名为cmak,下载地址为:https:github.comyahooCMAKreleasestag3.0.0.5现在 ... [详细]
                          • GPS 校验和 代码_Linux recovery 移除签名校验
                            原创作者:王锐,多年Linux系统、龙芯平台移植与优化研发经验,LinuxContributor、Mozillian。背景某个设备配套的刷 ... [详细]
                          • 环境变量_Visual Code配置环境变量
                            篇首语:本文由编程笔记#小编为大家整理,主要介绍了VisualCode配置环境变量相关的知识,希望对你有一定的参考价值。**1.下载 ... [详细]
                          • 文章目录前言必知必会的软件服务器分类机架式服务器塔式服务器刀片式服务器三者的区别虚拟服务器(云服务器)服务器的硬件组成服务器常见的品牌前言本文是循序渐进学linux的第一课,为 ... [详细]
                          • 步骤一:明确主打的核心目标用户群(对应产品侧的定位)这个核心目标用户群体是该产品成功挤进市场的切入点,甚至是撬动市场的支点和撬杠。市面上几乎很少有产品是专门给一个群体用而对其他群体 ... [详细]
                          • idea启动springmvc项目时报找不到类的解决方法
                            这篇文章主要介绍了idea启动springmvc项目时报找不到类的解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值, ... [详细]
                          • 如何用js 实现依赖注入的思想,后端框架思想搬到前端来
                            如何用js实现依赖注入的思想,后端框架思想搬到前端来-大家在做些页面的时候,很多都是用ajax实现的,在显示的时候有很多表单提交的add或者update操作,显然这样很烦,突然想到 ... [详细]
                          • 下载安装并配置flutter
                            1.去github上下载flutter安装包https:github.comflutterflutterreleasestag2.0.42.将安装包zip解压到你想安装Flut ... [详细]
                          • apk简单介绍APK的组成apk安装流程app的启动过程apk打包流程AIDLAIDL介绍为什么要设计这门语言它有哪些语法?默认支持的数据类型包括什么是apk打包流程 ... [详细]
                          • 互联网世界 9 种基本的商业模式
                            互联网世界9种基本的商业模式一个商业模式是运行一个公司的方法;通过该模式的运作,一个公司能维持自己的生存,就是说,能有收益。商业模式意味着一个公司是如何通过在价值链中定位自己,从而获 ... [详细]
                          • 先去官网下载Linux的压缩包$cd~$tarxJfMybase-Desktop-Ver820b7-Linux-amd64.tar.xz$cd.Mybase8$.Mybas ... [详细]
                          • 本节书摘来自华章计算机《Web前端开发最佳实践》一书中的第2章,第2.2节,作者:党 建更多章节内容可以访问云栖社区“华章计算机”公众号查看。2.2 前端代码重构代码 ... [详细]
                          • Mysql安装和初步使用
                            2019独角兽企业重金招聘Python工程师标准一、安装1、下载及安装:官网:https:downloads.mysql.comarchivesc ... [详细]
                          author-avatar
                          段筱筱雨_422
                          这个家伙很懒,什么也没留下!
                          PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
                          Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有