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.