On 8/5/25 13:01, Priya V wrote:
*Environment:*
    *PostgreSQL Versions:* Mix of 13.13 and 15.12 (upgrades in progress
    to be at 15.12 currently both are actively in use)

PostgreSQL 13 end of life after November 13, 2025

    *OS / Kernel:* RHEL 7 & RHEL 8 variants, kernels in the 4.14–4.18 range

RHEL 7 has been EOL for quite a while now. Note that you have to watch out for collation issues/corrupted indexes after OS upgrades due to collations changing with newer glibc versions.

    *Swap:* Currently none

bad idea

    *Workload:* Highly mixed — OLTP-style internal apps with
    unpredictable query patterns and connection counts

    *Goal:* Uniform, safe memory settings across the fleet to avoid
    kernel or database instability

We’re considering:
    *|vm.overcommit_memory = 2|* for strict accounting

yes

    Increasing |vm.overcommit_ratio| from 50 → 80 or 90 to better
    reflect actual PostgreSQL usage (e.g., |work_mem| reservations that
    aren’t fully used)

work_mem does not reserve memory -- it is a maximum that might be used in memory for a particular operation

*Our questions for those running large PostgreSQL fleets:*
 1.
    What |overcommit_ratio| do you find safe for PostgreSQL without
    causing kernel memory crunches?

Read this:
https://www.cybertec-postgresql.com/en/what-you-should-know-about-linux-memory-overcommit-in-postgresql/

 2.
    Do you prefer |overcommit_memory = 1| or |= 2| for production stability?

Use overcommit_memory = 2 for production stability

 3.
    How much swap (if any) do you keep in large-memory servers where
    PostgreSQL is the primary workload? Is having swap configured a good
    idea or not ?

You don't necessary need a large amount of swap, but you definitely should not disable it.

Some background on that:
https://chrisdown.name/2018/01/02/in-defence-of-swap.html

 4.
    Any real-world cases where kernel accounting was too strict or too
    loose for PostgreSQL?

In my experience the biggest issues are when postgres is running in a memory constrained cgroup. If you want to constrain memory with cgroups, use cgroup v2 (not 1) and use memory.high to constrain it, not memory.max.

 5. What settings to go with if we are not planning on using swap ?

IMHO do not disable swap on Linux, at least not on production, ever.

We’d like to avoid both extremes:
    Too low a ratio → PostgreSQL backends failing allocations even with
    free RAM

Have you actually seen this or are you theorizing?

    Too high a ratio → OOM killer terminating PostgreSQL under load spikes

If overcommit_memory = 2, overcommit_ratio is reasonable (less than 100, maybe 80 or so as you suggested), and swap is not disabled, and you are not running in a memory constrained cgroup, I would be very surprised if you will ever get hit by the OOM killer. And if you do, things are so bad the database was probably dying anyway.

HTH,

--
Joe Conway
PostgreSQL Contributors Team
Amazon Web Services: https://aws.amazon.com


Reply via email to