Como criar artificialmente uma consulta lenta no mysql?

15

Estou dando uma apresentação prática daqui a algumas semanas. Parte desta demonstração é para solucionar problemas básicos do mysql, incluindo o uso do log de consultas lentas. Eu criei um banco de dados e instalei nosso aplicativo, mas é um banco de dados limpo e, portanto, difícil de gerar problemas suficientes.

Eu tentei o seguinte para obter consultas no log de consultas lentas:

Defina o tempo de consulta lento como 1 segundo.

Vários índices excluídos.

Salientou o sistema:

stress --cpu 100 --io 100 --vm 2 --vm-bytes 128M --timeout 1m

Script algumas chamadas básicas da página da Web usando o wget.

Nada disso gerou consultas lentas. Existe outra maneira de forçar artificialmente o banco de dados a gerar problemas? Não tenho habilidades suficientes para escrever um Jmeter complexo ou outro gerador de carga. Espero, talvez, algo embutido no mysql ou outro truque do linux além do estresse.

Grey Race
fonte
1
+1 Por pedir para obter lentidão. Se ao menos fosse assim em casos reais: D
red

Respostas:

5

Caixa mysqlslap . Você pode passar uma das consultas do seu aplicativo da web com --query e especificar clientes simultâneos com --concurrency.

HTTP500
fonte
Isso funcionou melhor ... usando isso e uma combinação de ajuste do banco de dados.
Grey Race
34

Totalmente artificial, mas você pode usar a sleep()função:

select sleep(10);

No log:

Time                 Id Command    Argument
# Time: 110629 16:19:13
# User@Host: mysql[mysql] @ localhost []
# Query_time: 10.000218  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 0
SET timestamp=1309389553;
select sleep(10);
Mark Wagner
fonte
Obrigado pela sugestão ... Ele faz o log crescer, mas eu gostaria que eles fossem consultas legítimas para o aplicativo. Desta forma, eu posso demonstrar e explicar outras ferramentas de diagnóstico.
Grey Race
:) Hmm ... talvez um estratégico LOCK TABLESfuncione. Isso pode ser muito desajeitado também.
Mark Wagner
1
Normalmente, selecione * de ((selecione * do banco de dados) x) e cada vez mais recrutador faz o truque para mim.
precisa saber é o seguinte
Use DO SLEEP(10);se você não quiser o resultado do SLEEP na sua consulta.
Rasmus Friis Kjeldsen
1

Talvez o ajuste do banco de dados possa ajudar? Por exemplo, reduzindo o tamanho dos key_buffers?

agy
fonte