Naar de hoofdinhoud gaan
  1. Blog/

PostgreSQL performance tuning tips

·1 min
Auteur
Lars van der Berg
Ik bouw snelle, veilige websites en API’s. Gevestigd in Amsterdam.

PostgreSQL is fantastisch, maar de standaardinstellingen zijn erg conservatief. Met een paar aanpassingen krijg je veel betere prestaties.

Geheugenconfiguratie
#

Pas deze waarden aan in postgresql.conf:

1
2
3
4
5
# Beschikbaar geheugen: 8GB server
shared_buffers = 2GB              # 25% van RAM
effective_cache_size = 6GB        # 75% van RAM
work_mem = 64MB                   # Per query sort/hash
maintenance_work_mem = 512MB      # Voor VACUUM, INDEX

WAL configuratie
#

1
2
3
4
wal_buffers = 64MB
checkpoint_completion_target = 0.9
max_wal_size = 4GB
min_wal_size = 1GB

Connectie pooling met PgBouncer
#

PostgreSQL maakt voor elke verbinding een apart proces aan. Bij veel verbindingen is PgBouncer essentieel:

1
2
3
4
5
6
7
[databases]
mydb = host=127.0.0.1 port=5432 dbname=mydb

[pgbouncer]
pool_mode = transaction
max_client_conn = 200
default_pool_size = 20

Langzame queries opsporen
#

1
log_min_duration_statement = 500   # Log queries > 500ms

Analyseer met pg_stat_statements:

1
2
3
4
SELECT query, calls, mean_exec_time, total_exec_time
FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 10;

VACUUM niet vergeten
#

1
2
# Handmatig full vacuum (vergrendelt tabel!)
VACUUM (FULL, ANALYZE) grote_tabel;

Zorg dat autovacuum correct is geconfigureerd — standaard is het aan, maar de drempelwaarden zijn vaak te hoog.