Optimizing PostgreSQL Performance
Optimizing the performance of PostgreSQL database server, also known as Postgres.
- read the theory behind on Heroku: https://devcenter.heroku.com/articles/concurrency-and-database-connections
- generate optimized configuration: https://pgtune.leopard.in.ua/
In short: Postgres relies on page caching of operating system (Linux). Assign 25% of available memory to Postgres itself and 75% to cache.
An example for Postgres 12:
# DB Version: 12 # OS Type: linux # DB Type: web # Total Memory (RAM): 4 GB # CPUs num: 4 # Connections num: 400 # Data Storage: ssd max_connections = 400 shared_buffers = 1GB effective_cache_size = 3GB maintenance_work_mem = 256MB checkpoint_completion_target = 0.7 wal_buffers = 16MB default_statistics_target = 100 random_page_cost = 1.1 effective_io_concurrency = 200 work_mem = 1310kB min_wal_size = 1GB max_wal_size = 4GB max_worker_processes = 4 max_parallel_workers_per_gather = 2 max_parallel_workers = 4 max_parallel_maintenance_workers = 2