Start with a formula
pool_size = ((core_count * 2) + effective_spindle_count). For a 16-core app talking to SSD-backed Postgres: 34.
Advertisement
Total pool across instances
If you run 10 instances × 34 connections = 340 open connections. Postgres default max_connections is 100. Bump it or front with pgbouncer.
Advertisement
HikariCP config
HikariConfig cfg = new HikariConfig();
cfg.setMaximumPoolSize(34);
cfg.setMinimumIdle(4);
cfg.setConnectionTimeout(3000); // 3s
cfg.setIdleTimeout(600000); // 10min
cfg.setMaxLifetime(1800000); // 30min
cfg.setLeakDetectionThreshold(60000); // 1min
DataSource ds = new HikariDataSource(cfg);