Assuming a machine with: * 16 CPU cores * 64GB RAM
Set to 500 max connections A tool like this: https://pgtune.leopard.in.ua/ Will output recommended settings: max_connections = 500 shared_buffers = 16GB effective_cache_size = 48GB maintenance_work_mem = 2GB checkpoint_completion_target = 0.9 wal_buffers = 16MB default_statistics_target = 100 random_page_cost = 1.1 effective_io_concurrency = 200 work_mem = 8388kB huge_pages = try min_wal_size = 1GB max_wal_size = 4GB max_worker_processes = 16 max_parallel_workers_per_gather = 4 max_parallel_workers = 16 max_parallel_maintenance_workers = 4 And they basically use up all the memory of the machine. 16GB shared buffers, 48GB effective cache size, 8MB of work_mem for some reason... This seems rather extreme. I feel there should be free memory for emergencies and monitoring solutions. And then there's the fact that postgres on this machine will be run in a docker container. Which, on Linux, receives 64MB of /dev/shm shared memory by default, but can be increased. I feel like I should probably actually lower my upper limit for memory, regardless of what the machine actually has, so I can have free memory, and also not bring the container process itself into danger. Is it as straightforward as putting my limit on, say 20GB, and then giving more /dev/shm to the container? Or is there more to consider? Regards, Koen De Groote