ferramenta para teste de carga em sql personalizado

3

Eu gostaria de executar alguns testes para comparar nosso aplicativo mysql em várias configurações. Mas eu não quero usar algo como sysbench ou oltp tests, porque nós temos uma lógica pesada de stored procedures. Então ... eu quero testar contra nossos procedimentos.

Existe algum aplicativo / framework de teste que possamos usar para executar consultas personalizadas (como opção - em paralelo) e ver estatísticas? Algo como Siege para web? O que eu já encontrei normalmente usa seus próprios esquemas e cenários de banco de dados gerados.

Eu poderia pedir aos meus desenvolvedores que criam uma interface Java personalizada e usem o Siege para isso. O bot não quer adicionar sobrecarga nem afetar os números.

Atenciosamente, Igor.

    
por Shebnik 14.07.2009 / 04:18

5 respostas

2

O Jmeter pode fazer o teste de carga do banco de dados usando o JDBC: link

Eu não usei a funcionalidade jdbc antes, então não sei se ela lidará com suas consultas complexas.

    
por 24.07.2009 / 23:44
0

Você pode seguir os princípios gerais da maioria dos mecanismos de teste de unidade para criar um mecanismo simples de teste de unidade mySQL.

Criamos algo assim para o MS SQL no passado

A ideia foi a seguinte

1) Escrevemos procedimentos de testes unitários e damos a eles os mesmos prefixos de nomes como "teste_". No MS SQL também usamos propriedades estendidas como metainformação para descrever alguns parâmetros específicos de testes externos (o mesmo que no NUnit é possível usar diferentes atributos de teste)

2) Escrevemos um procedimento / script que abre um cursor, seleciona do catálogo todos os nomes de procedimento que iniciam "teste_" e executa cada um deles na instrução EXEC (@procedure_name). Se o teste falhar, o procedimento de teste deve gerar um erro.

3) Os resultados da execução do teste são armazenados em uma tabela.

4) Para executar o teste sobre os mesmos dados e obter resultados previsíveis, temos um banco de dados de teste de amostra que fizemos backup uma vez e restauramos do backup antes da execução de cada teste

    
por 14.07.2009 / 11:48
0

Se você quiser uma ferramenta que vem agora com o MySQL 5.1, você poderia fazer algo pior do que tentar MySQL Slap (também conhecido como mysqlslap) . Um exemplo direto da documentação:

Supply your own create and query SQL statements, with 50 clients querying and 200 selects for each:

mysqlslap --delimiter=";" \  
--create="CREATE TABLE a (b int);INSERT INTO a VALUES (23)" \  
--query="SELECT * FROM a" --concurrency=50 --iterations=200

Isso fornece a opção de executar os testes em paralelo - embora a implementação do paralelismo usando vários clientes possa não ser exatamente do seu agrado. Aqui está uma breve descrição (novamente, textualmente):

mysqlslap runs in three stages:

  1. Create schema, table, and optionally any stored programs or data you want to using for the test. This stage uses a single client connection.

  2. Run the load test. This stage can use many client connections.

  3. Clean up (disconnect, drop table if specified). This stage uses a single client connection.

Se isto não for exatamente do seu gosto, você pode usar um script cron para acionar o MySQL Slap em um horário específico para muitos usuários, ou para muitas máquinas configuradas / especificadas de forma idêntica, com caminhos de rede idênticos ao servidor etc ( o último é muito importante, pois o benchmarking deve eliminar possíveis discrepâncias para evitar conclusões obscuras).

Se (como é provável) você estiver executando uma versão anterior do MySQL, este link fornece informações úteis sobre como compilar a fonte 5.1 para 5.0; mais backporting provavelmente não é possível.

Aqui está um passo a passo básico.

    
por 14.07.2009 / 15:00
0

Eu gosto de:

  1. Escreva algum script PHP / Python / Perl para acessar o banco de dados e executar o teste e imprimir o resultado no formato XML
  2. Use uma ferramenta de benchmarking HTTP (httperf ou similar) para slogar o banco de dados e salvar as saídas resultantes
  3. Analise as falhas, repita.
por 17.07.2009 / 19:18
0

Acabei usando SQLIO para enfatizar os discos e, em seguida, escrevemos algumas consultas personalizadas para gerar um grande volume de dados e, em seguida, fizemos vários cálculos em tabelas grandes e simulamos um banco de dados altamente carregado, mas mal otimizado. Eu então aumentei o número de conexões simultâneas até que ele morreu.

    
por 30.07.2009 / 00:53