Prueba de Rendimiento “Stress” en PostgreSQL con Pgbench

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

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s