我们目前正在使用 PostgreSQL 13.4、Patroni、Consul 和 Confd 构建一个 PostgreSQL 集群。设置成功(Patroni 集群使用一个主服务器和一个副本进行复制),我们正在尝试使用具有不同复制设置的 pgbench 进行一些基准测试,特别是synchronous_commit
.
该文档清楚地表明,synchronous_commit
Master 上的有效值为:
- 离开
- 当地的
- 远程写入
- 上
- 远程应用
随着网络故障和崩溃(广义上)的安全性不断提高。所以这个想法是为每个设置生成一些基准(使用 pgbench)。正如文档所解释的,唯一有效的值synchronous_commit
是on
和off
何时synchronous_standby_names
为空。我们synchronous_standby_names
有*
.
然而,当改变 的值时synchronous_commit
,它似乎并没有改变任何东西。例子:
gobsux59:/etc/patroni # su - postgres
postgres@gobsux59:~> psql
psql (13.4)
Type "help" for help.
postgres=# show synchronous_commit;
synchronous_commit
--------------------
off
(1 row)
postgres=# alter system set synchronous_commit = 'local';
ALTER SYSTEM
postgres=# show synchronous_commit;
synchronous_commit
--------------------
off
(1 row)
postgres=# alter system set synchronous_commit = 'remote_write';
ALTER SYSTEM
postgres=# show synchronous_commit;
synchronous_commit
--------------------
off
(1 row)
postgres=# alter system set synchronous_commit = 'on';
ALTER SYSTEM
postgres=# show synchronous_commit;
synchronous_commit
--------------------
off
(1 row)
postgres=# alter system set synchronous_commit = 'remote_apply';
ALTER SYSTEM
postgres=# show synchronous_commit;
synchronous_commit
--------------------
off
(1 row)
postgres=#
总是有一些系统在这里干扰的机会,所以我检查了是否synchronous_commit
在适用的配置文件中的其他任何地方列出:
postgres@gobsux59:~/data> grep synchronous_commit *
postgresql.auto.conf:synchronous_commit = 'remote_apply'
postgresql.base.conf:#synchronous_commit = on # synchronization level;
postgresql.base.conf.backup:#synchronous_commit = on # synchronization level;
可以看到postgresql.auto.conf
(PostgreSQL根据语句自动编写的配置文件ALTER SYSTEM
)包含了上次使用设置的值ALTER SYSTEM
,但是在查询数据库时却显示了不同的值。
我已经研究了可能存在不同的配置范围,在这些范围中我覆盖了我正在查询的范围之外的另一个范围,但似乎并非如此(尽管我认识到可以为每个连接设置许多设置,每个-事务、每个集群等)。
我不确定如何进一步理解这个问题,我将不胜感激。
ALTER SYSTEM
所做的只是在数据目录中进行编辑postgresql.auto.conf
。要使更改生效,您必须重新加载服务器:
这可以在服务器运行时完成,不会中断操作。它告诉 PostgreSQL 从文件中加载新的配置参数。