Analizando la potencia de un servidor con PostgreSQL
Cuando montas un nuevo entorno de desarrollo o de producción, con nuevo hardware, y quieres compararlo con alguna instalación que conoces, tenemos una utilidad que nos puede ayudar en estos menesteres pgbench.
Pgbench, es un programa escrito en C apoyado en la librería libpq (más portable imposible) por lo que es facil compilarlo en el sistema que queramos testear, o también de manera más sencilla con un gestor de paquetes podeis agregar “postgresql-contrib”.
Una vez lo tengamos instalado creamos una base de datos de prueba
createdb pgbench
Después inicializamos la base de datos y aplicamos un factor de escala
pgbench -i pgbench -s 20
Con este comando hemos creado las tablas de prueba de pgbench (cuyos nombres son account, branches, tellers y history ) y luego las hemos rellenado aplicando un factor de escala 50, que define cuantas tuplas (filas) contendrán dichas tablas. Por ejemplo un factor de 20 supone crear 2 millones de registros en la tabla “account”.
Ahora podemos lanzar el test:
pgbench -c 10 -t 10000
Que ejecutará operaciones de consulta, actualización e inserción (select/update/insert) de filas sobre el esquema de pruebas. Podemos ajustar el paralelismo de las operaciones, por ejemplo -c 10 simula la concurrencia de 10 usuarios a la vez. A la vez podemos especificar el número de transacciones a realizar, -t 100 implica 100 transacciones por usuario.
La salida del test, nos dará el numero de tps (Transacciones por segundo) que soporta nuestro servidor. Ejecutar varias veces el test sin variar los parámetros puede dar ligeras diferencias en el valor de tps, lo cual es normal.
Ejemplo de salida:
pghost: pgport: (null) nclients: 10 nxacts: 10000 dbName: bench
`transaction type: TPC-B (sort of) scaling factor: 20 number of clients: 10
number of transactions per client: 10000 number of transactions
actually processed: 100000/100000 tps = 561.056729 (including connections establishing)
tps = 561.127760 (excluding connections establishing)
Por lo tanto nuestro servidor para las condiciones que hemos fijado tiene una capacidad de proceso de 561 transacciones por segundo. Sabiendo esto, podemos comparar distintos servidores con diferentes capacidades de memoria, sistemas de almacenamiento, procesador, etc. Podremos medir que mejora podemos esperar al cambiar de hardware y su rentabilidad a nivel de transacciones ganadas versus coste del nuevo material.
Ni que decir tiene que la mayor utilidad es poder ajustar de manera acertada el fichero de configuración postgresql.conf ya que podemos alterar cualquier entrada del fichero de configuración y medir inmediatamente las tps resultantes después de cambio y compararlas con las anteriores.
Espero que esta pequeña introducción, le sirva a alguien a disfrutar más de PostgreSQL y desearos que pgbench os muestre cada día valores mayores de tps.

Septiembre 9th, 2006 at 2:02 pm
Muy interesante. Ahora mismo tengo que montar una máquina de desarrollo con un postgres así que lo pondré en práctica.
Septiembre 13th, 2006 at 12:39 am
Muy bueno y muy currado el post, Paco. Nos va a venir de perlas en el curro ¿verdad _MARIO_?
Octubre 29th, 2007 at 9:59 pm
Ey me encanta el post, especialmente para algunas pruebas que debo llevar a cabo con el desarrollo de mi tesis.
Saludos y gracias por los tips.
Octubre 30th, 2008 at 10:19 pm
Saludos, tengo un servidor con debian etch R4, le instale el postgresql-8.1, postgresql-common-8.1, y no puedo usar el comando pgbench.
Traté de usar los fuentes del pgbench-1.0 y 1.1 solo me servia el ./configure, pero al hacer el make me daba un error y no he podido probar esta herramienta, por favor necesito de su ayuda, consigo muy poca información con respecto a esto.
Gracias