El 16/07/10 14:55, Rodriguez Fernando escribió:
El 16/07/2010 14:34, Mario Sileone escribió:
Estimada lista:
Tengo un problema que estimo es de concurrencia. Trataré de ser
lo más breve posible.
Tengo un servidor Dell con 4 procesadores dualcore y 8 GB de RAM,
3 discos en RAID 1 con Postgres 8.2.7 y Apache con la página en el
mismo servidor.
Tengo un split de tablas por mes, como una vez me iluminaron aqui,
con aprox. 12.000.000 de registros mensuales, el movimiento diario es
de 400.000 registros de crecimiento, y las tengo con
contraint_exclusion en on.
Asimismo tengo dos tablas que realizan updates a razón de 300 veces
por minuto, y varias vistas sobre estas tablas, con triggers y
SELECTS sobre tablas dentro de ellos.
las aplicaciones que hacen los updates (son 4) lo hacen asíncronamente.
El tema está en que cuando se inician las actividades de clientes
entre las 09 AM y las 10 aprox. se produce el problema. el load
average del servidor me ha subido hasta 20, con procesador IDLE en
buen porcentaje y por supuesto, un 40% promedio en WAIT. Cuando
reviso pg_lock me encuentro con que se llega hasta más de 6000
registros de bloqueo, y hasta 147 conexiones simultáneas. La consulta
que se ejecuta cada 1 minuto por parte de los clientes utiliza las
tablas con gran update.
No tengo Swap in ni Swap out, y el porcentaje de hits en el
buffer es del 85% promedio (baja un poco en la hora pico).
No tengo Idle in transaction.
¿Puedo estar haciendo algo mal yo tanto en diseño de base de
datos o es que al nivel de carga arriba mencionado estoy chico de
servidor? ¿un pool de conexiones ayudaría?
Tengo información disponible de pgstat, uptime, vmstat, pg_lock,
configuración, consultas, explains, etc, por si necesitan, pero no
termino de llegar a una conclusión por ignorancia la verdad.
Desde ya muchas gracias por su tiempo y perdón por lo extenso del
mail, traté de resumir lo más importante.
Saludos Cordiales
Mario Sileone.
-
Enviado a la lista de correo pgsql-es-ayuda
(pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda
Hola, la máquina no me parece mala.
Deberias enviar la configuración del postgresql.conf por el tema de
memoria
Lo que presumo es que se deben estar actualizando muchos indices, o
sea primero insertas y crea los nodos y seguramente despues los
actualiza, sacrificar algun indice, o menos horrible simplificarlos
(un campo -un indice)
saludos Fernando
Gracias Fernando por tu respuesta:
Los índices son simples, no tengo índices compuestos, todos son un campo
un índice como comentas. Las tablas que tienen split son por timestamp
(por las dudas esto afecte), copio la parte de memoria de
postgresql.conf, pongo la config de WAL también por las dudas. Realizo
un Vacuum a toda la base de datos una vez por día.
max_connections = 200
shared_buffers = 2048
work_mem = 128MB
maintenance_work_mem = 256MB
max_fsm_pages = 1200000
max_fsm_relations = 3000
checkpoint_segments = 5
checkpoint_timeout = 5min
checkpoint_warning = 30s
Saludos y gracias
Mario
-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda