调整 wal_segment_size 导致PostgreSQL 停止服务

近一段时间一致是 MYSQL ,​​PostgreSQL​​ 两条腿走路,这样做是有原因的,不是所有的企业都是互联网企业,也不是所有企业的程序员都能良好的理解MYSQL的使用方式,也不能强制要求程序员将复杂的SQL 都变成程序的方式来进行。PostgreSql 的兼容性以及对于复杂SQL 语句的处理更强悍,这是毋庸置疑的。所以这也是部分金融机构企业转向POSTGRESQL 的原因之一。所以DBER 们也的根据实际情况和业务情况以及程序员的水平和业务的稳定度综合评定出,到底是MYSQL 还是 POSTGRESQL 。

而对程序员来说无疑最收还原的还是POSTGRESQL 的稳定性以及兼容性还有一些其他数据库没有的特异功能。今天不想说这些,因为这些都是有目共睹的事情了。最近有一个项目要准备使用POSTGRESQL 作为基础数据库,在调整wal_segment_size 的时候本身没有出现什么问题,但调整之后就出现了 POSTGRESQL 突然DOWN机以及无法再启动的问题,这里的说说这个坑。

首先说这个问题之前说的,POSTGRESQL 可以调整的关于数据库内部的参数原先在PostgreSQL 中的 wal segment size 是在编译的过程中进行设置的,目前PG 11版本中是在初始数据库或者通过 pg_resetwal 来进行调整的。而如果在初始数据库的时候应该不会出现这个问题,而使用pg_resetwal 命令来进行pg_wal 的从新设置,会产生一个问题。

具体过程如下

1 关闭PostgreSQL的数据库服务

2 使用 pg_resetwal 命令将 wal size 重新进行设置

调整 wal_segment_size 导致PostgreSQL 停止服务_重新启动

3 重新启动服务器

调整 wal_segment_size 导致PostgreSQL 停止服务_mysql_02

4 报错

FATAL: "min_wal_size" must be at least twice "wal_segment_size"

错误信息提示 min_wal_size 必须是 wal_segment_size 的两倍

我们去调整 min_wal_size 参数

调整 wal_segment_size 导致PostgreSQL 停止服务_数据库_03

再次重新启动postgreSQL OK

其实提示我要调整 wal_segment_size 的是某银行的一篇文章,其中提到由于wal_segement_size 设置的较小,并且还有一些配置的问题,导致wal_log 疯狂的增长,所以后期他们准备调整这个参数,但文章中提到没有办法调整 wal_segement_size 原因是由于编译的过程中才能调整,而安装后就不能调整了,某银行使用的POSTGRESQL 应该是低于 11 这个版本的,所以也就有了这次PG 11调整版本,然后机器无法启动的问题。