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:
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
Coloque a pasta locaweb na respectiva hospedagem.
Acesse o link onde está os arquivos. (ex: http://www.seudominio.com.br/locaweb).
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.
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, …)
Em “Nome verdadeiro”, você opta pela listagem dos nomes reais, tanto das tabelas como dos campos:
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.
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; } } <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
- Definir ou alterar a senha do MySQL
- Informações de acesso ao banco MySQL
- Bases MySql no plano Premium
- Scripts de conexão ao MySQL
- Como restaurar um arquivo .SQLno banco MySQL via phpMyAdmin
- Como restaurar um arquivo .SQL no banco MySQL via SSH
- Criando usuários adicionais no MySQL
- Posso utilizar tabelas temporárias no MySQL?
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
- Clientes dos planos abaixo com Gerenciamento pela Locaweb podem solicitar estas alterações criando um chamado no Help Desk
- Servidores Dedicados -> Servidores Dedicados
- Cloud Server Pro -> Cloud Server Pro
- Gestão Personalizada -> Gestão Personalizada
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
- Definir ou alterar a senha do MySQL
- Trigger
- Como efetuar um Backup do banco MySQL via SSH
- Informações de acesso ao banco MySQL
- Stored procedures
- Criação de índice no mysql
- Resolvendo problemas de caracteres acentuados no MySQL
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