Subject: Tuning Linux for Postgresql - Database failed to start

From: Albin Ary <[email-masked]>
Date: Tue, 10 May 2022 22:23:02 +0200

Hello,
I have a Postgresql Database cluster.
Version: 14.2
OS: Oracle Linux 8

I tried to follow the link to optimize the server.
https://www.enterprisedb.com/blog/tuning-red-hat-enterprise-linux-family-postgresql

Unfortunately, after rebooting the database is not starting anymore. I know
the HINT is straightforward but I am not able to see what the reason could
be.

Any advice would be appreciated.

-- Unit postgresql-14.service has begun starting up.
May 10 22:10:40 postgersdb.localdomain postmaster[1612]: 2022-05-10
22:10:40.047 CEST [1612] FATAL:  could not map anonymous shared memory:
Cannot allocate memory
May 10 22:10:40 postgersdb.localdomain postmaster[1612]: 2022-05-10
22:10:40.047 CEST [1612] *HINT:  This error usually means that PostgreSQL's
request for a shared memory segment exceeded available memory,>*
May 10 22:10:40 postgersdb.localdomain postmaster[1612]: 2022-05-10
22:10:40.048 CEST [1612] LOG:  database system is shut down
May 10 22:10:40 postgersdb.localdomain systemd[1]: postgresql-14.service:
Main process exited, code=exited, status=1/FAILURE
May 10 22:10:40 postgersdb.localdomain systemd[1]: postgresql-14.service:
Failed with result 'exit-code'.
-- Subject: Unit failed
-- Defined-By: systemd
-- Support: https://support.oracle.com

---

From: Scott Ribe <[email-masked]>
Date: Tue, 10 May 2022 14:29:48 -0600

> On May 10, 2022, at 2:23 PM, Albin Ary <[email-masked]> wrote:
> 
> Hello, 
> Unfortunately, after rebooting the database is not starting anymore. I know the HINT is straightforward but I am not able to see what the reason could be. 
> 
> May 10 22:10:40 postgersdb.localdomain postmaster[1612]: 2022-05-10 22:10:40.047 CEST [1612] FATAL:  could not map anonymous shared memory: Cannot allocate memory
> May 10 22:10:40 postgersdb.localdomain postmaster[1612]: 2022-05-10 22:10:40.047 CEST [1612] HINT:  This error usually means that PostgreSQL's request for a shared memory segment exceeded available memory,>
> May 10 22:10:40 postgersdb.localdomain postmaster[1612]: 2022-05-10 22:10:40.048 CEST [1612] LOG:  database system is shut down
> May 10 22:10:40 postgersdb.localdomain systemd[1]: postgresql-14.service: Main process exited, code=exited, status=1/FAILURE
> May 10 22:10:40 postgersdb.localdomain systemd[1]: postgresql-14.service: Failed with result 'exit-code'.
> -- Subject: Unit failed
> -- Defined-By: systemd

This is a decent quick guide to the parameters affecting this:

https://docs.oracle.com/cd/E19879-01/821-0182/fxxua/index.html

And here is the explanation as to how they related to postgres:

https://www.postgresql.org/docs/14/kernel-resources.html

---

From: Albin Ary <[email-masked]>
Date: Tue, 10 May 2022 22:39:09 +0200

Hello,

Thanks a lot for your inputs.

I only changed the section related to HugePages.

This server has 4 GB RAM.

shared_buffers = '1GB'
vm.nr_hugepages=650

tuned profile:

[main]
summary=Tuned profile for EDB PostgreSQL Instances
[bootloader]
cmdline=transparent_hugepage=never
[cpu]
governor=performance
energy_perf_bias=performance
min_perf_pct=100
[sysctl]
vm.swappiness = 10
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 250
vm.dirty_ratio = 10
vm.dirty_background_ratio = 3
vm.overcommit_memory=0
net.ipv4.tcp_timestamps=0

[vm]
transparent_hugepages=never
vm.nr_hugepages=605

On Tue, 10 May 2022 at 22:29, Scott Ribe <[email-masked]>
wrote:

> > Unfortunately, after rebooting the database is not starting anymore. I
> know the HINT is straightforward but I am not able to see what the reason
> could be.
> >
> 22:10:40.047 CEST [1612] HINT:  This error usually means that PostgreSQL's
> request for a shared memory segment exceeded available memory,>
> > May 10 22:10:40 postgersdb.localdomain systemd[1]:
> postgresql-14.service: Main process exited, code=exited, status=1/FAILURE
> > May 10 22:10:40 postgersdb.localdomain systemd[1]:
> postgresql-14.service: Failed with result 'exit-code'.
> > -- Subject: Unit failed
> > -- Defined-By: systemd

---

From: Kenneth Marshall <[email-masked]>
Date: Tue, 10 May 2022 15:48:55 -0500

> This server has 4 GB RAM.
Hi Albin,

1GB shared_buffers + 1.3GB huge pages on a 4GB system = don't have
enough resources. Please remove the huge pages request or add additional
memory to your system.

Regards,
Ken

---

From: Albin Ary <[email-masked]>
Date: Tue, 10 May 2022 22:58:15 +0200

Ok, will do that. Thanks a lot.

It is clear now why it fails to start.

Actually, the blog author mentions that setting it high might cause the
database failing to start, anyway a calculation is provided and I followed
that calculation.

The ideal number of huge pages is just a bit higher than this -- just a
> bit. If you increase this value too much, processes that need small pages
> that also need space in the OS will fail to start. This may even end up
> with the operating system failing to boot or other PostgreSQL instances on
> the same server failing to start.