divendres, 10 d’agost de 2012

Mysqlslap: Emulació de càrrega per a MySQL

Existeix una eina per a MySQL molt útil per a realitzar benchmarks i per a comparar el rendiment de MySQL en diferents hardwares. La utilitat s'anomena mysqlslap.

Aquest programa és útil per a probar la configuració de MySQL amb diferrent engines i configuracions.

Utilització Bàsica:

 

La forma més bàsica en la que podem utilitzar el programa es la següent:

mysqlslap --user=root --auto-generate-sql 
 
Que mostrarà el següent output per pantalla:
Benchmark
        Average number of seconds to run all queries: 0.274 seconds
        Minimum number of seconds to run all queries: 0.274 seconds
        Maximum number of seconds to run all queries: 0.274 seconds
        Number of clients running queries: 1
        Average number of queries per client: 0

Aquesta utilitat crearà una base de dades anomenada mysqlslap i una taula de 2 columnes anomenada t1 i començarà a fer inserts i selects aleatoris sobre aquesta taula. Podem veure el que està realitzant mysqlslap si afegim -v a la linia de comandes. Depenent del nombre de v que utilitzem obtindrem més o menys informació.
mysqlslap --user=root --auto-generate-sql -vvv
El sistema ens mostrarà la següent eixida a la comanda:
Building Create Statements for Auto
Building Query Statements for Auto
Parsing engines to use.
Starting Concurrency Test
DROP SCHEMA IF EXISTS `mysqlslap`;
Loading Pre-data
CREATE SCHEMA `mysqlslap`;
CREATE SCHEMA `mysqlslap`;
CREATE TABLE `t1` (intcol1 INT(32) ,charcol1 VARCHAR(128));
INSERT INTO t1 VALUES (1804289383,'mxvtvmC9127qJNmKQ1lT4zg9rdxBL');
...
INSERT INTO t1 VALUES (737703662,'2zxutF6rOAKEF4MknsY');
Generating primary key list
connected!
INSERT INTO t1 VALUES (73673339,'BN3152Gza4GW7atxJ7yTahm');
SELECT intcol1,charcol1 FROM t1;
INSERT INTO t1 VALUES (1759592334,'3lkoxjtvgLu5xKJgaZDu2');
SELECT intcol1,charcol1 FROM t1;
INSERT INTO t1 VALUES (95275444,'bNIrBDBl81tjzdvuw4igsp');
SELECT intcol1,charcol1 FROM t1;
INSERT INTO t1 VALUES (866596855,'naQuzhMt1IrZ3KgEIM');
SELECT intcol1,charcol1 FROM t1;
INSERT INTO t1 VALUES (364531492,'qMa5SuYwEKdvuWr');
Generating stats
Benchmark
        Average number of seconds to run all queries: 0.067 seconds
        Minimum number of seconds to run all queries: 0.067 seconds
        Maximum number of seconds to run all queries: 0.067 seconds
        Number of clients running queries: 1
        Average number of queries per client: 0

DROP SCHEMA IF EXISTS `mysqlslap`;

També es pot simular un nombre de connexions concurrent. En aquest cas 99. Com es pot veure el rendiment cau bastant.
mysqlslap --user=root --auto-generate-sql --concurrency=99
El resultat del test es el següent:
Benchmark
        Average number of seconds to run all queries: 20.056 seconds
        Minimum number of seconds to run all queries: 20.056 seconds
        Maximum number of seconds to run all queries: 20.056 seconds
        Number of clients running queries: 99
        Average number of queries per client: 0
 

Altres opcions: 

Un altre aspecte que podem configurar es el nombre de voltes que realitzarem el test.
mysqlslap -user=root --auto-generate-sql --concurrency=99 --iterations=10
El resultat del test es el següent:
Benchmark
        Average number of seconds to run all queries: 17.898 seconds
        Minimum number of seconds to run all queries: 15.922 seconds
        Maximum number of seconds to run all queries: 21.250 seconds
        Number of clients running queries: 99
        Average number of queries per client: 0
Per a configurar el nombre de consultes a realitzar també existeix un parametre:
mysqlslap --user=root --concurrency=99 --iteration=10 --auto-generate-sql \
       --number-of-queries=3000
El resultat del test és el següent:
Benchmark
        Average number of seconds to run all queries: 42.705 seconds
        Minimum number of seconds to run all queries: 37.088 seconds
        Maximum number of seconds to run all queries: 46.909 seconds
        Number of clients running queries: 99
        Average number of queries per client: 30

Un altre aspecte modificable es la taula que es crea inicialment. Per defecte es crea una taula de dues files una numèrica i l'altra de chars. Amb 2 parametres podem configurar el nombre de camps int o char de la taula.
mysqlslap --user=root --concurrency=99 --iteration=10 --auto-generate-sql \
        --number-of-queries=1000 --number-int-cols=2 --number-char-cols=3 
El resultat del test es el següent:
Benchmark
        Average number of seconds to run all queries: 23.206 seconds
        Minimum number of seconds to run all queries: 21.860 seconds
        Maximum number of seconds to run all queries: 24.543 seconds
        Number of clients running queries: 99
        Average number of queries per client: 10
El programa també permet definir diferents engines, probar queries específiques sobre una base de dades existent i fins i tot generar fitxers .csv que es poden utilitzar posteriorment per a realitzar gràfiques.

Links:

 

 http://blog.dbadojo.com/2007/08/mysql-vs-mysqlslap.html
 http://blog.dbadojo.com/2008/01/mysql-vs-mysqlslap-round-2.html
 http://www.techrepublic.com/blog/howdoi/how-do-i-stress-test-mysql-with-mysqlslap/133

Cap comentari:

Publica un comentari a l'entrada