I'm in the process of upgrading from postgres 7.4.8 to 9.0.4 and wanted to run my decisions past some folks who can give me some input on whether my decisions make sense or not.
It's basically a LAPP configuration and on a busy day we probably get in the neighborhood of a million hits.
Server Info:
- 4 dual-core AMD Opteron 2212 processors, 2010.485 MHz
- 64GB RAM
- 16 67GB RAID 1 drives and 1 464GB RAID 10 drive (all ext3)
- Linux 2.6.18-164.el5 #1 SMP Thu Sep 3 03:28:30 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux
There are 3 separate databases:
DB1 is 10GB and consists of multiple tables that I've spread out so that the 3 most used have their data and indexes on 6 separate RAID1 drives, the 3 next busiest have data & index on 3 drives, and the remaining tables and indexes are on the RAID10 drive. The WAL for all is on a separate RAID1 drive.
The others are very write-heavy, started as one table within the original DB, and were split out on an odd/even id # in an effort to get better performance:
DB2 is 25GB with data, index, and WAL all on separate RAID1 drives.
DB3 is 15GB with data, index, and WAL on separate RAID1 drives.
Here are the changes I made to postgres.conf. The only differences between the conf file for DB1 and those for DB2 & 3 are the port and effective_cache_size (which I made slightly smaller -- 8 GB instead of 10 -- for the 2 write-heavy DBs). The 600 max connections are often idle and don't get explicitly closed in the application. I'm looking at connection pooling as well.
autovacuum = on
autovacuum_analyze_threshold = 250
autovacuum_freeze_max_age = 200000000
autovacuum_max_workers = 3
autovacuum_naptime = 10min
autovacuum_vacuum_cost_delay = 20ms
autovacuum_vacuum_cost_limit = -1
autovacuum_vacuum_threshold = 250
checkpoint_completion_target = 0.7
checkpoint_segments = 64
checkpoint_timeout = 5min
checkpoint_warning = 30s
deadlock_timeout = 3s
effective_cache_size = 10GB
log_autovacuum_min_duration = 1s
maintenance_work_mem = 256MB
max_connections = 600
max_locks_per_transaction = 64
max_stack_depth = 8MB
shared_buffers = 4GB
vacuum_cost_delay = 10ms
wal_buffers = 32MB
wal_level = minimal
work_mem = 128MB
ANY comments or suggestions would be greatly appreciated.
Thank you,
Midge