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

postgresql流复制同步异步转换

瀚高PG实验室 2021-07-13
2980

@[toc]

## 介绍

数据库流复制支持同步和异步方式,同步方式能提供最大保护,异步方式能提供最大可用。同步方式在网络异常或备库宕机情况下,主库操作也会受影响,事务操作会出现等待状态。当出现以上场景时,我们总是希望进行降级,将同步转为异步,避免主库hang住。

 - 如果实在无法保持所要求数量的同步后备,那么应该减少synchronous_standby_names中指定的事务提交应该等待其回应的同步后备的数量(或者禁用),并且在主服务器上重载配置文件。

   

 - 即便当同步复制被启用时,个体事务也可以被配置为不等待复制,做法是将synchronous_commit参数设置为local或off。

基于以上描述,可以实现流复制同步异步转换操作。必要时,可直接将同步复制降级为异步复制。

## 同步异步转换

修改synchronous_standby_names,然后reload生效。也就是说转换过程不需要重启服务器,这一点非常方便的。

 - 同步流复制,synchronous_standby_names指定需要启用同步复制策略的备用服务器

 - 异步流复制,synchronous_standby_names为空

示例

    ```sql
    alter system set synchronous_standby_names='standby12';
    select pg_reload_conf();

    此时关闭备库,主库执行insert,主库hang住

    alter system set synchronous_standby_names='';
    select pg_reload_conf();

    此时insert就执行成功了
    ```

    ## 同步复制不等待

    修改synchronous_commit参数设置为local或off,reload生效。即使为同步复制,主库事务也无需等待。此种情况也可以看做是另一种“同步转异步”

    示例

      ```sql
      alter system set synchronous_standby_names='standby12';
      alter system set synchronous_commit=local;
      select pg_reload_conf();

      此时关闭备库,主库执行insert,主库不受影响。但是注意

        DETAIL:  The transaction has already committed locally, but might not have been replicated to the standby.
        ```

        最后修改时间:2021-07-13 09:17:38
        文章转载自瀚高PG实验室,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

        评论