domingo, 29 de janeiro de 2012

MySQL Slap: Batendo forte em nosso banco de dados

Continuando com nossa análise sobre teste de desempenho no MySQL vamos aprender hoje a utilizar uma ferramenta bastante poderosa, o mysqlslap, com ele poderemos executar várias tarefas, utilizar vários usuários ao mesmo tempo simulando um load casual de um servidor. Vamos lá.

O mysqlslap é distribuído juntamente com a instalação do mysql, geralmente se você não encontrá-lo no diretório padrão tente fazer o download de alguma distribuição com o título "noinstall".

Se sua instalação MySQL está completa e foi feita de forma correta com todos os PATHs e diretórios padrão basta digitar mysqlslap e pressionar ENTER e serão mostrados os resultados de execução.

shell> mysqlslap --user=bench_user --password --auto-generate-sql
Enter password:
Benchmark
Average number of seconds to run all queries: 0.035 seconds
Minimum number of seconds to run all queries: 0.035 seconds
Maximum number of seconds to run all queries: 0.035 seconds
Number of clients running queries: 1
Average number of queries per client: 0


Vamos a um exemplo mais complexo, para isto vou criar uma tabela utilizando a maioria dos tipos de dados existentes no MySQL. Segue os comandos abaixo:

/* Cria o banco de dados */
CREATE DATABASE bench;

/* Cria a tabela */
CREATE TABLE bench (
id int not null auto_increment primary key,
c1 int,
c2 CHAR(30),
c3 VARCHAR(30),
c4 FLOAT(10,2),
c5 DECIMAL(10,2),
c6 TEXT
) ENGINE=MyISAM;

Bem, essa será nossa tabela de testes, após a criação do banco de dados e da tabela descrita acima vamos criar um arquivo .SQL para incluir uma query com INSERTs nesta tabela.

INSERT INTO bench.bench VALUES(null,100000,'AA','AA',789.89,789.89,'TEXTO AQUI');

Insira os comandos acima em um arquivo e grave-o como bench.sql, lembre-se que apenas será executado apenas um comando por linha, na query acima você pode incluir o tamanho máximo de cada tipo criado, quis deixar assim para facilitar o exemplo.

Agora vamos utilizar o que criamos acima para executar com o mysqlslap.

mysqlslap --user=user_bench -p --concurrency=10 --iterations=10 --query=bench.sql

Vamos entender os parâmetros acima:

--user e -p -> usuário e senha que será utilizado para performar o teste, neste caso deve ter as permissões INSERT na tabela em questão.

--concurrency -> a quantidade de conexões simultâneas que serão utilizadas para executar a query expecificada, por exemplo, neste caso estaremos fazendo com que 10 conexões executem cada uma 10 vezes a mesma query.

--iterations -> a quantidade de queries que serão executadas para cada conexão especificada em concurrency

Após pressionar ENTER obteremos o resultado do nosso teste, claro que em seu servidor os valores poderão ser diferentes.

Benchmark
Average number of seconds to run all queries: 0.125 seconds
Minimum number of seconds to run all queries: 0.124 seconds
Maximum number of seconds to run all queries: 0.127 seconds
Number of clients running queries: 10
Average number of queries per client: 10


Abaixo vamos ver mais algumas opções interessantes para utilizar com o mysqlslap:

--auto-generate-sql -> gera automaticamente um query para execução

--auto-generate-sql-add-auto-increment -> gera automaticamente tabelas que contém campos do tipo AUTO_INCREMENT

--burnin -> executa os testes no modo burn-in, ou seja, executa todos os parâmetros especificados de forma ininterrupta, implementado no MySQL 6.0

--engine -> utiliza um determinado ENGINE para executar os testes

Bem, aqui você já tem uma idéia de como utilizar o mysqlslap para testar suas queries e o desempenho do seu servidor. Para saber mais parâmetros sobre o mysqlslap utilize mysqlslap --help


Até a próxima

Nenhum comentário:

Postar um comentário

Observação: somente um membro deste blog pode postar um comentário.