Não perca a nossa BLACK FRIDAY, descontos REAIS e VITALÍCIOS de 50% OFF SAIBA MAIS!

Como medir as consultas do seu mysql e evitar lentidão

Como medir as consultas do seu mysql e evitar lentidão

17/08/2017 às 16:00WordPress

Quando você precisa de uma aplicação de alto desempenho, busca além de carregamento rápido, facilidade de uso e entrega rápida dos resultados, isso inclui diretamente o tempo de resposta da sua base de dados. Quando até mesmo um site mais simples vem apresentando dificuldades de exibir rapidamente uma informação que faça uma consulta no mysql, a sua base de dados pode estar com problemas ou até mesmo seu servidor pode não estar aguentando a carga de processamento e causando essa lentidão, então vamos te dar algumas dicas de como você pode medir esse desempenho e identificar quando é a hora de mudar de plano ou até mesmo provedor de hospedagem.

Alguma vez você já recebeu alguma notificação de processamento lento no mysql? Ou seu site foi bloqueado por alegarem estar prejudicando os outros clientes com o consumo elevado da sua base de dados? Esse podem ser problemas muito comuns e algumas vezes fáceis de identificar e corrigir, basta entender onde o problema está começando e procurar uma solução que atenda a sua real necessidade, muitas vezes é apenas limite do seu plano, não da sua aplicação, um provedor de hospedagem de site pode resolver sem dificuldades o seu problema.

Como identificar um problema?

Você pode notar o problema de lentidão a qualquer momento, na navegação do site, durante o uso no painel administrativo de suas aplicações, como o WordPress ou outros serviços. A grande questão é que um sistema lento não é eficiente e dessa forma você acaba tendo um grande esforço para atrair visitantes, manter clientes satisfeitos com o uso de sua aplicação, mas no fim das contas acaba com muitas reclamações devido a uma experiência de uso ruim. Então identifique os problemas de acordo com os feedbacks que vão surgindo, colete as informações com detalhes da tarefa executada, horário, ação que apresentou erro, tudo o que for diretamente relacionado ao seu problema.

Faça os testes necessários no seu mysql

Não é de hoje que a necessidade de testar sempre o seu sistema é comentada dia e noite, você precisa garantir que o seu funcionamento está de acordo com o esperado e atendendo claramente as necessidades de seus clientes e até mesmo as suas, criar um cronograma de testes e verificações das atividades que envolvem o desempenho e segurança dos seus sites e aplicações é o mais indicado e não deve ficar de fora do seu checklist.
Crie benchmarks de rotina e verifique a carga de processamento do seu mysql e o tempo de resposta de cada processo, localizar gargalos na entrega de resultados da sua base é essencial para que um pequeno problema não se torne maior por falta de resolução logo no início, bases de dados que tendem a crescer muito ao longo do uso podem ser uma enorme dor de cabeça quando não estão otimizadas, quanto maior a base, maior será o tempo de processamento.

1 - Um benchmark da maneira mais fácil

Podemos fazer testes de performance de várias formas, algumas delas mais fáceis e básicas, outras mais complexas e completas. Através de um simples arquivo.php você pode realizar alguns testes básicos no processamento do banco de dados da sua aplicação, o projeto é gratuito e seu código está disponível para download através do link benchmark-php, após baixar o arquivo benchmark.php você precisa apenas extrair o arquivo em uma pasta de seu site, informar seus dados de conexão com mo banco e executar o link através do seu navegador.

$options['db.host'] = 'localhost';
$options['db.user'] = 'usuariodobanco';
$options['db.pw'] = 'senhadobanco';
$options['db.name'] = 'basededados';

Uma página com os resultados será exibida em poucos segundos.

benchmark    
math    0.512
string    4.997
loops    0.042
ifelse    0.057
mysql    
connect    3.025
select_db    3.254
query_version    4.168
query_benchmark    21.557
total    21.557
total    27.209

 

Algumas tarefas de processamento serão realizadas e ao fim o total em segundos será um ponto para se preocupar. Como no exemplo acima, um total de 27 segundos foi o necessário para concluir os testes, de acordo com a sua base de dados esse é um tempo que pode ser um problema se a sua base de dados for pequena.

2 - Testes mais profundos com o sysbench

Quando você já tem um pouco mais de experiência e entende da parte técnica, pode avaliar mais a fundo o seu banco de dados e tirar resultados mais completos através de benchmarks. Nós recomendamos o sysbench, que é uma ferramenta muito completa e fácil de ser utilizada, não recisa de grandes configurações e não precisa de muito processamento.

Você pode iniciar a instalação caso não tenha a ferramenta através do repositório da sua distribuição:

Ubuntu/Debian:
apt-get install sysbench

CentOS:
yum install sysbench

Para iniciar os testes precisamos criar uma base de dados de testes, com 1,000,000 linhas de dados:

sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=teste --mysql-user=usuariodobanco --mysql-password=suasenhadobanco prepare

Para iniciar os testes no seu MySQL, agora você precisa seguir os seguintes comandos:

sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=teste --mysql-user=usuariodobanco --mysql-password=senhadobanco --max-time=60 --oltp-read-only=on --max-requests=0 --num-threads=4 run

Os resultados serão exibidos assim que o benchmark terminar, você receberá algo semelhante aos dados abaixo, que são apenas um exemplo.

sysbench 0.4.11:  multi-threaded system evaluation benchmark

No DB drivers specified, using mysql
Running the test with following options:
Number of threads: 4

Doing OLTP teste.
Running mixed OLTP teste
Doing read-only teste
Using Special distribution (11 iterations,  2 pct of values are returned in 69 pct cases)
Using "BEGIN" for starting transactions
Using auto_inc on the id column
Threads started!
Time limit exceeded, exiting...
(last message repeated 8 times)
Done.

OLTP test statistics:
    queries performed:
        read:                            3040958
        write:                           0
        other:                           421590
        total:                           3462548
    transactions:                        160980 (2673.06 per sec.)
    deadlocks:                           0      (0.00 per sec.)
    read/write requests:                 2293860 (37562.81 per sec.)
    other operations:                    321980 (5466.12 per sec.)

Test execution summary:
    total time:                          60.1024s
    total number of events:              160990
    total time taken by event execution: 479.3419
    per-request statistics:
         min:                                  0.81ms
         avg:                                  2.98ms
         max:                               3283.40ms
         approx.  95 percentile:               4.62ms

Threads fairness:
    events (avg/stddev):           20123.7500/63.52
    execution time (avg/stddev):   59.9177/0.00

As informações mais importantes são o número de transações feitas por segundo e o tempo total que levam para serem executadas, você pode acompanhar em transactions e total time, são informações que você deve ter como referência para melhorar caso estejam levando muito tempo de processamento.

Ao terminar todos os testes você pode limpar a base de testes com apenas mais um comando:

sysbench --test=oltp --mysql-db=teste --mysql-user=usuariodobanco --mysql-password=senhadobanco cleanup

Vale lembrar que é sempre bom executar esses testes mais de uma vez, assim você pode ter mais dados para serem comparados e analisados.

Conclusão

Você viu que buscar uma base de dados rápida e eficiente é uma tarefa que demanda atenção e cuidado, ensinamos duas formas eficientes de medir a performance do seu bando de dados e entender como você pode melhorar as suas configurações e até mesmo suas aplicações, algumas vezes a codificação está fora dos padrões de qualidade da linguagem, você pode ler nossas dias de 5 boas práticas para um programador php.

Gostou de nosso post? Compartilhe: