Gracias Fernando, estoy completamente de acuerdo contigo sobre los problemas de 
performance que puede haber sobre todo por causa de la aplicación, me han 
tocado muchos. Hablando de escalabilidad vertical me ayuda mucho tu comentario 
y la url.
Saludos.



From: fhe...@gmail.com
Date: Fri, 22 Aug 2014 20:05:53 -0300
Subject: Re: [pgsql-es-ayuda] Servidores grande y su maximo rendimeinto
To: fabrix...@hotmail.com
CC: alvhe...@2ndquadrant.com; pgsql-es-ayuda@postgresql.org


2014-08-22 16:51 GMT-03:00 Fabricio <fabrix...@hotmail.com>:






Buen día.
Me gustaría conocer su opinión sobre que tan escalable puede llegar a ser 
PostgreSQL.
Por ejemplo si hayun servidor de 64 cores y 128GB de RAM y este  da un 
rendimiento aproximado de 900 operaciones por segundo atendiendo alrededor de 
700 usuarios, ¿Qué debería esperar de un mainframe  o un power con cientos de 
cores y memoria?  es decir, ¿La base de datos no tiene alguna limitante en 
cuanto a concurrencia u operaciones máximas que pueda procesar y me procesara 
muchas mas con servidores mas robustos?


Gracias de antemano, saludos.                                     

Mi primer pensamiento es que la aplicación debe estar horriblemente programada 
para que necesites semejante hardware para producir 900 tps. El segundo es que 
debe haber grandes posibilidades que ni los cores ni la ram tengan que ver con 
ese límite sino que la contención se produce a nivel de IO. Tal vez quieras 
darnos más info. ¿De que se trata el sistema, que actividad tienen típicamente 
esos 700 usuarios, cual es tu storage, que connection pooler usas y donde estás 
tocando los límites? Ese es un buen punto de partida. Con simplemente agregar 
más hardware me temo que no verás los resultados que esperas. 


Si bien Postgres viene haciendo sólidos avances versión a versión para mejorar 
su escalabilidad vertical, siempre hay un punto donde un proceso extra en lugar 
de sumar restará a la performance del sistema. Entonces la respuesta es si, 
existen limitantes inherentes a la arquitectura y código de Postgres que 
limitarán o incluso degradarán la performance pasada cierta cantidad de 
backends concurrentes. El punto exacto depende mucho del tipo de carga que le 
arrojes pero me imagino que con 64 procesadores debes estar ya en el límite.

No tengo ninguna base corriendo sobre más de 16 cores y en todos los casos la 
contención se da a nivel de IO así que lamentablemente no puedo compartir 
experiencia práctica. Lo que si puedo decir es que en mi experiencia el 90% de 
los casos de problemas serios de performance la solución vino por optimizar el 
código de la aplicación. A nivel de la base un connection pooler y el 
particionado de tablas son dos recursos de fácil implementación que permiten 
escalar enormemente la performance.


Esta es una presentación interesante sobre las mejoras que introdujo 9.2 sobre 
su predecesor al respecto: 
http://wiki.postgresql.org/images/e/e8/FOSDEM2012-Multi-CPU-performance-in-9.2.pdf


Saludos,Fernando.                                         

Responder a