No PostgreSQL (não sei MySQL) existe max_connections propriedade definida como:
Determines the maximum number of concurrent connections to the database server. The default is typically 100 connections, but might be less if your kernel settings will not support it (as determined during initdb). This parameter can only be set at server start.
Increasing this parameter might cause PostgreSQL to request more System V shared memory or semaphores than your operating system's default configuration allows. See Section 17.4.1 for information on how to adjust those parameters, if necessary.
O limite efetivo de conexões do cliente é definido como:
max_connections - superuser_reserved_connections
O valor padrão para superuser_reserved_connections é 3.
Você precisa ter uma visão em perspectiva. Hoje, vamos dizer que 40 max_connections é seguro para você e mantém alguns recursos do SO livres (semamphores e memória compartilhada, conforme descrito em documentação ), mas amanhã pode não ser suficiente:
psql: FATAL: sorry, too many clients already
Vamos calcular o lucro que você recebe:
minSemaphoresSets = ceil((max_connections + autovacuum_max_workers)/16)
O valor padrão para autovacuum_max_workers é 3, então:
prevSets = ceil((100 + 3)/16) = 7
newSets = ceil((40 + 3)/16) = 3
Cada conjunto (Postgres) tem sempre 17 semáforos, então você tem 68 semáforos protegidos:
ipcs -s | grep postgres
0x0052e2c1 589824 postgres 600 17
0x0052e2c2 622593 postgres 600 17
0x0052e2c3 655362 postgres 600 17
0x0052e2c4 688131 postgres 600 17
0x0052e2c5 720900 postgres 600 17
0x0052e2c6 753669 postgres 600 17
0x0052e2c7 786438 postgres 600 17
# changing max_connections from 100 to 40
pg_ctlcluster 8.3 main restart
ipcs -s | grep postgres
0x0052e2c1 819200 postgres 600 17
0x0052e2c2 851969 postgres 600 17
0x0052e2c3 884738 postgres 600 17
Para memória compartilhada é ~ 1 MiB (veja Tabela 17- 2 para mais detalhes):
ipcs -m | grep postgres
0x0052e2c1 0 postgres 600 29368320 4
# changing max_connections from 100 to 40
pg_ctlcluster 8.3 main restart
ipcs -m | grep postgres
0x0052e2c1 425984 postgres 600 28270592 4
Como você vê, não é demais, então você pode usar o limite padrão se não precisar dessa otimização.