El presente instructivo tiene como finalidad explicar los pasos necesrios para la instalación de Pgbench y explicar su funcionamiento a través de unos ejemplos
Requisitos:
- Se debe contar con suficiente privilegios para la configuración de aplicativos
- Se debe tener instalado postgreSQL-Server
Plataforma:
- Equipos de arquitectura 64 bits
- Sistema operativo ‘GNU/Linux’ Debian versión 8.0 (actualmente estable)
Aplicaciones:
- Pgbench versión (PostgreSQL) 9.6.5
Instalación:
root@server:/# aptitude install postgresql-contrib-9.6
Adecuando Data de Prueba
1. Crear BD de ejemplo:
root@server:/# createdb prueba -h127.0.0.1 -Upostgres
2. Inicializar BD de prueba para Pgbench:
root@server:/# pgbench -Upostgres -h127.0.0.1 -i prueba
Password: contraseña_postgres NOTICE: la tabla «pgbench_history» no existe, ignorando NOTICE: la tabla «pgbench_tellers» no existe, ignorando NOTICE: la tabla «pgbench_accounts» no existe, ignorando NOTICE: la tabla «pgbench_branches» no existe, ignorando creating tables... 100000 of 100000 tuples (100%) done (elapsed 0.03 s, remaining 0.00 s) vacuum... set primary keys... done.
Donde:
-i (–initialize) -> permite crear cuatro tablas pgbench_accounts, pgbench_branches, pgbench_history y pgbench_tellers.
El peso de la BD creada para el test “prueba” es de aproximadamente 22MB, si realmente se desea efectuar unas pruebas de rendimiento de mediana envergadura, es necesario crear una BD de mayor tamaño, por ello se utiliza el párametro de “-s” (scale_factor), definido en la ayuda como: Multiplique la cantidad de filas generadas por el factor de escala. Por ejemplo, -s 100 creará 10.000.000 de filas en la tabla pgbench_accounts. El valor predeterminado es 1.
En el siguiente ejemplo se utilizará 70 como factor, esto no da un peso peso aproximado de 1GB de datos.
3. Inicializar BD de prueba para Pgbench con factor 70:
root@server:/# pgbench -Upostgres -h127.0.0.1 -i -s 70 prueba
Password: contraseña_postgres NOTICE: la tabla «pgbench_history» no existe, ignorando NOTICE: la tabla «pgbench_tellers» no existe, ignorando NOTICE: la tabla «pgbench_accounts» no existe, ignorando NOTICE: la tabla «pgbench_branches» no existe, ignorando creating tables... 100000 of 7000000 tuples (2%) done (elapsed 0.03 s, remaining 1.23 s) 200000 of 7000000 tuples (4%) done (elapsed 0.05 s, remaining 1.23 s) 300000 of 7000000 tuples (6%) done (elapsed 0.08 s, remaining 1.21 s) ........ 6700000 of 7000000 tuples (95%) done (elapsed 6.06 s, remaining 0.27 s) 6800000 of 7000000 tuples (97%) done (elapsed 6.14 s, remaining 0.18 s) 6900000 of 7000000 tuples (98%) done (elapsed 6.64 s, remaining 0.10 s) 7000000 of 7000000 tuples (100%) done (elapsed 6.72 s, remaining 0.00 s) vacuum... set primary keys... done.
4. Comprobar el “peso” de la data de ejemplo:
postgres=# SELECT pg_database.datname, pg_size_pretty(pg_database_size(pg_database.datname)) AS size FROM pg_database;
datname | size -----------+--------- prueba | 1054 MB (4 filas)
Iniciando Pruebas
Parámetros ha utilizar para la ejecución de la pruebas:
1.- -c (clientes), define la cantidad de clientes con los que se conecta. Para esta prueba se utilizarán 5 cliente, es decir que pgbench abrirá 5 sesiones diferentes
2.- -j (hilos), define la cantidad de procesos de trabajo para pgbench. En el ejemplo se emplearán 2 hilos, esto le indicará a pgbench que inicie dos procesos de trabajo durante el benchmarking.
3.- -t (transacciones), define el número de transacciones que se ejecutarán. En el ejemplo se colocará un valor de 10,000. Sin embargo, esto no significa que solo se ejecutarán 10.000 transacciones contra el servicio de base de datos, sino que cada sesión de cliente ejecutará 10.000 transacciones.
En resumen, en la ejecución de la prueba se utilizarán dos (2) procesos de trabajo de pgbench, que simulan 10.000 transacciones de 5 clientes para un total de 50.000 transacciones.
1. Efectuar una prueba “base”
root@server:/# pgbench -Upostgres -h127.0.0.1 -p5432 -c 5 -j 2 -t 10000 prueba
starting vacuum...end. transaction type: scaling factor: 70 query mode: simple number of clients: 5 number of threads: 2 number of transactions per client: 10000 number of transactions actually processed: 50000/50000 latency average = 48.439 ms tps = 103.222223 (including connections establishing) tps = 103.223282 (excluding connections establishing)
Lectura: 103 transacciones por segundo
Enlaces:
Tuning PostgreSQL with pgbench
Las pruebas de regresión del rendimiento con 9,0 pgBench