Mysql: Benchmark

Imagen Mysql: Benchmark

Mysql: Benchmark

  • Autor: fjavimartin

  • Fecha de Creación: 18/07/2016

  • Categorías:

    • Mysql,
    • Benchmark

No hace demasiado observé que el rendimiento de una instalación drupal había caído bastante y no había realizado ninguna actualización dudosa ni cambio en el servidor web por lo que todo apuntaba a que el problema estaba en la base de datos. Para salir de dudas necesitaba comprobar el rendimiento de la base de datos después de cambiar algún parámetro de configuración, pero……..¿Cómo hacerlo?

Rebuscando en la documentación de mysql podemos encontrar un comando externo llamado mysqlslap que utilizaremos para realizar pruebas de carga. Podemos utililizar un montón de parámetros, pero de momento vamos con un par de ejemplos sencillos que nos permita ver como funciona.

Autogeneración

Comenzaremos autogenerando las querys que se ejecutaran contra nuestro gestor. Este comando será muy interesante cuando queramos comprobar el rendimiento del gestor en general:

$ mysqlslap  --concurrency=1 --iterations=10 --number-int-cols=6 --number-char-cols=12 --auto-generate-sql --engine=innodb --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=mixed  --number-of-queries=10000  --user=root -p
Enter password: 
Benchmark
	Running for engine innodb
	Average number of seconds to run all queries: 17.558 seconds
	Minimum number of seconds to run all queries: 17.015 seconds
	Maximum number of seconds to run all queries: 18.686 seconds
	Number of clients running queries: 1
	Average number of queries per client: 10000

Scripts Personalizados

Observando la salida de este comando podemos comprobar la potencia del mismo, pero lo que casi con toda probabilidad nos intereserá en mayor media será personalizar la base de datos sobre la que lanzar querys personalizadas. Mysqlslap nos permitirá utilizar un par de ficheros con el script de creación para la base de datos y por otro lado un fichero con las querys que queramos lanzar.

En este ejemplo vamos a crear una pequeña base de datos sobre la que ejecutaremos nuestras propias querys y para ello utilizaremos los siguientes dos ficheros.

creacion.sql

-- 
-- Estructura de tabla para la tabla `pais`
-- 
CREATE TABLE `pais` ( 
	`id_pais` int(10) unsigned NOT NULL, 
	`descripcion` varchar(25) NOT NULL
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

-- 
-- Estructura de tabla para la tabla `distrito`
-- 

CREATE TABLE `distrito` ( 
	`id_distrito` int(10) unsigned NOT NULL, 
	`descripcion` varchar(12) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 
-- Estructura de tabla para la tabla `dep`
-- 

CREATE TABLE `departamento` ( 
	`id_departamento` int(10) unsigned NOT NULL, 
	`descripcion` varchar(12) NOT NULL, 
	`id_pais_fk` int(10) unsigned NOT NULL, 
	`id_distrito_fk` int(10) unsigned NOT NULL 
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

query.sql

-- 
-- Volcar la base de datos para la tabla `pais`
-- 

INSERT INTO `pais` VALUES (1, 'peru');
INSERT INTO `pais` VALUES (2, 'argentina');

-- 
-- Volcar la base de datos para la tabla `distrito`
-- 

INSERT INTO `distrito` VALUES (1, 'Juliaca');
INSERT INTO `distrito` VALUES (1, 'Puno');
INSERT INTO `distrito` VALUES (1, 'huancane');
INSERT INTO `distrito` VALUES (1, 'azangaro');
INSERT INTO `distrito` VALUES (3, 'santo tome');
INSERT INTO `distrito` VALUES (3, 'santiago');
INSERT INTO `distrito` VALUES (3, 'Chaco');
INSERT INTO `distrito` VALUES (3, 'San Rafael');

-- 
-- Volcar la base de datos para la tabla `departamento`
-- 

INSERT INTO `departamento` VALUES (1, 'Puno', 1,1);
INSERT INTO `departamento` VALUES (2, 'arequipa', 1, 2);
INSERT INTO `departamento` VALUES (3, 'cordoba', 2, 3);
INSERT INTO `departamento` VALUES (4, 'San Luis', 2, 4);

Esta sentencia nos permitirá comprobar el rendimiento del gestor con cada cambio en su configuración o en las sentencias de creación/consulta que utilicemos.

Saludos.

Referencias

http://dev.mysql.com/doc/refman/5.7/en/mysqlslap.html

https://www.digitalocean.com/community/tutorials/how-to-measure-mysql-query-performance-with-mysqlslap

http://anothermysqldba.blogspot.com.es/2014/05/mysql-benchmark-with-mysqlslap.html

Todos los Derechos Reservados © 2016

Funciona con Drupal