Teste de conexão e desempenho de bancos de dados MySQL

Este pequeno aplicativo tem o objetivo de fazer um simples teste de desempenho em banco de dados mysql.

O seu funcionamento limita-se a lista todas os nomes de todas as tabelas e/ou os campos desses tabelas, permitindo que você liste, ou o nome dessas tabelas/campos, ou a eunumeração dos mesmos (tabela1, tabela2, etc.. / campo1, campo2, etc), executando o teste quantas vezes julgar necessário e ao final obter o tempo (em segundos) que o aplicativo levou para executar a tarefa. Você pode ainda exibir ou enibir a listagem das tabelas e/ou campos.

É algo bem simples, mas creio que pode auxiliar os cliente a testarem de forma rápida a conexão e o desempenho do banco de dados MySQL, interna ou extermamente, em ambas plataformas.

Para fazer o teste, siga estas instruções:

Teste de conexão e desempenho de banco de dados mysql Crie os arquivos index.html e fazteste.php com o código que está no final da wiki e coloque-os na pasta chamada locaweb. #Código Fonte

Teste de conexão e desempenho de banco de dados mysql Coloque a pasta locaweb na respectiva hospedagem.

Teste de conexão e desempenho de banco de dados mysql Acesse o link onde está os arquivos. (ex: http://www.seudominio.com.br/locaweb).

Teste de conexão e desempenho de banco de dados mysql Aparecerá a seguinte tela:

Teste de conexão e desempenho de banco de dados mysql

Teste de conexão e desempenho de banco de dados mysql Nos campos servidor e usuário, você deve colocar o nome do servidor ou o ip e o login do banco de dado conforme a figura abaixo.

Teste de conexão e desempenho de banco de dados mysql

Teste de conexão e desempenho de banco de dados mysql Em “listar tabela” e “listar campos”, uma vez selecionados, será listado todas as tabelas e os seus respectivos campos, ambos de forma numerada (tabela1, campo1, campo2, … tabela2, campo1, campo2, …)

Teste de conexão e desempenho de banco de dados mysql

Teste de conexão e desempenho de banco de dados mysql Observe o resultado:

Teste de conexão e desempenho de banco de dados mysql

Teste de conexão e desempenho de banco de dados mysql Em “Nome verdadeiro”, você opta pela listagem dos nomes reais, tanto das tabelas como dos campos:

Teste de conexão e desempenho de banco de dados mysql

Teste de conexão e desempenho de banco de dados mysql Veja o resultado:

Teste de conexão e desempenho de banco de dados mysql

Teste de conexão e desempenho de banco de dados mysql Em “Número de Execuções do Teste” você define quantas vezes o teste será executado. Essa opção ajuda a ter um tempo mais mensurável, já que a execução de teste apenas uma vez, traz um valor de tempo muito pequeno.

Teste de conexão e desempenho de banco de dados mysql Ao final do teste é mostrado o tempo total que o script levou para ser executado em segundos.

Código do arquivo index.php

Código Fonte

index.php

<html>      <head>      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">           <title>[PHP] Teste de desempenho de banco de dados</title>           <style>           .x {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:smaller;}           .y {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:xx-small;}           </style>      </head>      <body>
          <script language="Javascript"> 
              function validaForm(){                       d = document.testemysql;                       //validar host                       if (d.host.value == ""){                                   alert("O campo " + d.host.name + " deve ser preenchido!");                                   d.host.focus();                                   return false;                         }                            //validar login                       if (d.login.value == ""){                                   alert("O campo " + d.login.name + " deve ser preenchido!");                                   d.login.focus();                                   return false;                         }                            //validar senha                       if (d.senha.value == ""){                                   alert("O campo " + d.host.senha + " deve ser preenchido!");                                   d.senha.focus();                                   return false;                         }                            //validar repetir                       if (d.repetir.value == ""){                                   alert("O campo Numero de Execuções de Teste deve ser preenchido!");                                   d.repetir.focus();                                   return false;                         }                    } 

</script>

          <h2>Teste simples de desempenho de banco de dados MySQL</h2>           <form class="x" name="testemysql" action="fazteste.php" method="post" onSubmit="return validaForm()">                <p class="x">Dados do servidor<br>                <table border="0">                     <tr>                          <td class="x">Servidor: </td>                          <td><input class="x" type="text" name="host" id="host"></td>                     </tr>                     <tr>                          <td class="x">Usuario: </td>                          <td><input class="x" type="text" name="login" id="login"></td>                     </tr>                     <tr>                          <td class="x">Senha: </td>                          <td><input class="x" type="password" name="senha" id="senha"></td>                     </tr>                     <tr>                          <td class="y">Lista Tabelas?: </td>                          <td><input class="x" type="checkbox" size="20" name="listaTabela" id="listaTabela"></td>                          <td class="y">Nome Verdadeiro?: </td>                          <td><input class="x" type="checkbox" name="nomeTabelaVerdadeiro" id="nomeTabelaVerdadeiro"></td>                     </tr>                     <tr>                          <td class="y">Lista Campos?: </td>                          <td><input class="x" type="checkbox" name="listaCampo" id="listaCampo"></td>                          <td class="y">Nome Verdadeiro?: </td>                          <td><input class="x" type="checkbox" name="nomeCampoVerdadeiro" id="nomeCampoVerdadeiro"></td>                     </tr>                     <tr>                          <td class="x">Numero de Execuções do Teste: </td>                          <td><input class="x" type="text" name="repetir" id="repetir"></td>                     </tr>                </table>                <div class="x">                     <input class="x" type="submit" value="enviar">                </div>           </form>      </body> </html>

fazteste.php

<?php   // Criamos a função que fará os cálculos atravéz do comando microtime() do PHP $tempo = null; function execucao(){      $sec = explode(" ",microtime());     $tempo = $sec[1] + $sec[0];     return $tempo;    }   // No inicio da página executamos a função para iniciar o calculo, gerando a variavel $inicio $inicio = execucao();        //echo "hora de inicio: ".$Time->TempoInicialParcial;        $host = $_POST["host"];      $login = $_POST["login"];      $senha = $_POST["senha"];        if(isset($_POST["listaTabela"])) {                $listaTabela =1;           }  else  {                $listaTabela = 0;           }        if(isset($_POST["nomeTabelaVerdadeiro"])) {                $nomeTabelaVerdadeiro =1;           }  else  {                $nomeTabelaVerdadeiro = 0;           }        if(isset($_POST["listaCampo"])) {                $listaCampo =1;           }  else  {                $listaCampo = 0;           }        if(isset($_POST["nomeCampoVerdadeiro"])) {                $nomeCampoVerdadeiro =1;           }  else  {                $nomeCampoVerdadeiro = 0;           }                  $repetir = $_POST["repetir"];          $repeticao = 0;     while ($repeticao < $repetir) {           $link = null;           $result = null;           $tabelas = null;           $result1 = null;           $row = null;             $link = mysql_connect($host, $login, $senha)or die("Falha ao se conectar ao banco. Verifique se os dados de conexão estão corretos.");;            if (!$link) {                echo 'Nao foi possivel conectar: '. mysql_error() . '<br>';                exit;           } else {                echo 'Conectado ao banco '. $login. ' no servidor '.$host. ' <br>';           }             $dbname = $login;           mysql_select_db($dbname, $link);             $sql = "SHOW TABLES FROM $dbname";           $result = mysql_query($sql);             if (!$result) {                echo "DB Error, could not list tables/n";                echo 'MySQL Error: ' . mysql_error();                exit;           }  /*else {                echo 'tabela - consulta realizada com sucesso <br><br>';           } */             $contar = 0;           while ($tabelas = mysql_fetch_row($result)) {                //echo "Tabela: {$tabelas[0]}/n <br>";                $contar++;                if ($listaTabela == 1) {                     if ($nomeTabelaVerdadeiro == 0) {                          echo "Tabela: ".$contar."<br>";                          } else {                          echo "Tabela: {$tabelas[0]} <br>";                          }                }                  $result1 = mysql_query('SHOW COLUMNS FROM `'.$tabelas[0].'`');                 if (mysql_num_rows($result1) > 0) {                     $contar1 = 0;                           while ($row = mysql_fetch_assoc($result1)) {                                //print '<span>'.$row['Field'].'</span><br />';                                $contar1++;                          if ($listaCampo == 1) {                               if ($nomeCampoVerdadeiro == 0) {                                    print '<span>Campo: '.$contar1.'</span><br />';                                } else {                                    print '<span>'.$row['Field'].'</span><br />';                               }                          }                     }                if ($listaTabela || $listaCampo) {                     echo "<br>";                      }                }            }           mysql_close($link);           $repeticao++;           echo "execução numero: ". $repeticao;           echo "<br>";      }       // Após a execução da página, geramos a variavel $fim, que nos dará o tempo final da execução da página $fim = execucao();   // Agora é só fazermos a subtração de um pelo outro, e usar o number_format() do PHP para formatar com 6 casas depois da virgula e pronto, mas caso você queira alterar esse número de casas depois da vírgula para mais ou menos, fique a vontade $tempo = number_format(($fim-$inicio),6);   // Agora á só imprimir o resultado print "Tempo de Execução: <b>".$tempo."</b> segundos";   ?>

Veja também


Listando todas as variáveis do MySQL

Com a query abaixo você consegue visualizar, por exemplo, quantas conexões seu usuário pode fazer (max_user_connection) e qual o tamanho máximo de um arquivo (casos de campos do tipo BLOB) a ser enviado (max_allowed_packet).


 SHOW VARIABLES;

É possível filtrar os nomes das variáveis também, por exemplo:


 SHOW VARIABLES LIKE '%connection%';

    Alterando valores de uma variável

    Em alguns casos é possível que se altere o valor de uma variável, mas a alteração será válida somente para a sessão (conexão) atual. Quando você abrir uma outra conexão ou desconectar e conectar novamente, a nova conexão sempre carregará os valores padrões.

    Sintaxe da query de alteração:


     SET nome_da_variavel = novo_valor;

    Exemplo:


     SET table_type = InnoDB;

    • Este exemplo altera o padrão das tabelas a serem criadas de MyISAM (padrão Locaweb) para InnoDB.

    Para saber se uma variável pode ser alterada, ou se ela foi alterada (baseada no exemplo acima), rode:


     -- Veja primeiro o valor atual da variável.  SHOW VARIABLES LIKE 'table_type';    -- Altere para o valor desejado.  SET table_type = InnoDB;    -- E veja novamente o valor da variável.  SHOW VARIABLES LIKE 'table_type';

    • Não são todas as variáveis que podem ser alteradas, as que exigem um SET GLOBAL somente o usuário ‘root’ ou outro com mais privilégios terá condições de alterá-la.
    • A Locaweb não altera o valor das variáveis globais no servidor (as que exigem SET GLOBAL), pois impactará diretamente nas outras bases que estão sob o mesmo servidor

    Para verificar quais variáveis são de sessão acesse:

    http://docs.oracle.com/cd/E17952_01/refman-5.1-en/mysqld-option-tables.html

    Visualizando as conexões ativas

    A query que fará você visualizar as conexões do seu usuário ativas será


     SHOW PROCESSLIST;

    Ela retornará valores como PID (número do processo da conexão), a quantidade de conexões do seu usuário à base, a query que a conexão está rodando no momento ou se ela está ociosa (sleep).

    Derrubando conexões e processos presos

    Caso se depare com problemas de conexão presa, ou seu usuário esteja usando todas as conexões disponíveis para ele, a query abaixo derrubará a conexão que você escolher:

    Sintaxe:


     KILL <numero_PID>;

    • O PID você obtém rodando SHOW PROCESSLIST (exemplo do tópico anterior).

    Exemplo:


     KILL 2552;

    Veja também


    Era isso que estava procurando?
    SimNão

    Demo Title

    Demo Description


    Introducing your First Popup.
    Customize text and design to perfectly suit your needs and preferences.

    Isso vai fechar em 20 segundos

    Categorias

    [menu name="categorias"]

    Isso vai fechar em 20 segundos