5 votos

Debe la conexión de base de datos límite igual al número de procesos que se conectan?

Me di cuenta de que PostgreSQL y MySQL en un 100 cliente límite de conexión por defecto. Me pregunto si debo activar esta abajo desde el servidor web está en el mismo cuadro y solo tengo 20 procesos de PHP que necesita para conectarse.

Debe esta opción de igualar o superar el número de procesos que se intente conectar?

4voto

En PostgreSQL (no sé MySQL) hay max_connections propiedad se define como:

Determina el número máximo de conexiones simultáneas a la base de datos servidor. El valor predeterminado es normalmente 100 conexiones, pero puede ser menos si su ajustes del núcleo no apoyo (como se determina durante el initdb). Este parámetro sólo se puede configurar en el servidor inicio.

El aumento de este parámetro podría causar PostgreSQL para solicitar más el Sistema de V memoria compartida o semáforos que su predeterminada del sistema operativo configuración permite. Consulte La Sección 17.4.1 para obtener información sobre cómo ajustar los parámetros, si es necesario.

Límite efectivo de las conexiones de cliente se define como:

max_connections - superuser_reserved_connections

Valor predeterminado para superuser_reserved_connections es 3.

Usted necesita tomar un poco de perspectiva a la vista. Hoy digamos 40 max_connections es seguro para usted y mantiene algunos recursos del sistema operativo libre (semamphores y de memoria compartida como se describe en la documentación), pero mañana podría no ser suficiente:

psql: FATAL:  sorry, too many clients already

Vamos a calcular lo que el beneficio que se obtiene:

minSemaphoresSets = ceil((max_connections + autovacuum_max_workers)/16)

Valor predeterminado para autovacuum_max_workers es 3, así:

prevSets = ceil((100 + 3)/16) = 7
newSets = ceil((40 + 3)/16) = 3

Cada uno (Postgres) establecer siempre ha 17 semáforos, por lo que tiene 68 semáforos safed:

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 la memoria compartida es ~ 1 MiB (buscar en la Tabla 17-2 para más detalles):

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 se puede ver no es demasiado, así que usted puede utilizar límite predeterminado si no necesitas de optimización.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: