Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

horacio2009

aceleração de inserção no banco de dados

Recommended Posts

boa tarde!!!

estou com um problema com atualização de uma tabela.

e´assim,eu estou chamando um cadastro de um cliente e no momento que eu chamo esse cliente é gravado uma informação minha nesse cadastro que acaba bloqueando o cliente, impedindo assim, que outras pessoas acessem a ficha dele.

ok!

só que eu fico com a tabela no banco de dados(pelo php myadmin) aberta para ir acompanhando o resultado, só que , acontece de demorar para essa informação aparecer para mim no myadmin.

só que, o ponto onde tá incomodando um pouco é que todas as requisições, execução de funções e tudo de php é feito no servidor e devolvido na tela, com tudo que tem que ser feito pronto(inclusive as alterações)porém, no banco de dados essa alteração demora, não tinha que como ser mais rápido, digo, na velocidade da exibição da página?pois,do jeito que está a ficha não está sendo bloqueada e outras pessoas, acessando em momentos próximos, acessam ela sem problema...

tem algum coisa que pode ser feita no sentido de atualizar mais rápido no banco de dados?

estou tentando limar tudo que é excessivo no código, porém,sem resultados...

o que faço com esse problema?

Obrigado a todos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha essa velocidade depende de muitas coisa... da complexdade da inserção das informações ou alterações, da forta que você esta fazendo sua busca..

 

As vezes a lentidao pode ser tb no seu servidor web que demora pra te mostrar na tela, isso pode acontecer por causa da sua internet ou hospedagem.

 

 

Posta ai o codigo que você esta utilizando para que possa ser analizado..

 

 

 

para cv ter uma ideia do tempo que sua pagina esta levando paar executar alguma coisa você pode usar esse script no seu codigo

 

<?php
//adicionar no inicio do script a ser analizado
$marcador_inicial = microtime(1);
?>

<?php
//adicionar ao fim do script a ser analizado
$marcador_final= microtime(1);
$tempo_execucao = $marcador_final - $marcador_inicial;
echo "Tempo para execução: <b>" .sprintf ( "%02.3f", $tempo_execucao ). "</b> segundos. <br>";
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não consegui entender onde está o problema, até porque a gravação é automática, assim que executa a query, a não ser que a tabela esteja com LOCK e o INSERT seja feito com DELAYED. De qualquer forma, não parece ser problema do PHP, e sim de configuração do seu banco de dados.

Por via das dúvidas, poste o código de uma destas inserções e diga qual o banco de dados está utilizando.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom,deixa eu responder por etapas:

o resultado daquele script de tempo que me passou foi: : 0.000

ainda respondendo para o wolfphw, o código é relativamente complexo, sim...ele limpa determinados campos numa parte, altera esses campos logo em seguida...enfim, é complexo, mas FUNCIONA!!! porém, com esse atraso....como disse, eu conferi e tá ok, não nego que possa haver algum bug no código e tal, porém, o que me incomoda MUITO como disse, foi a demora...e a alteração acontece de acordo com o que é determinado no meu script...pelo meno, onde eu posso acompanhar, digamos assim, tá certo...

 

agora, respondendo ao Matias Rezende:

matia, meu problema se resume numa demora considerável na atualização dos dados...o sisteminha roda legal, mas com essa demora...mas fiquei extremamente interessado nessa "DELAYED" que você se referiu, pois eu imagino que seja isso, pois 100% do problema se resume ao atraso...bom, essas características que mencionei, cruzam com isso que você disse, me informa, por favor a respeito desses campos e como configura-los de forma tornar essa atualização o mais rápido possível, pois, esse scritpt é de um sistema de gestão, e vários operadores usam ele ao mesmo tempo e aprendendo a manipular essas configurações corretamente, vai resolver 99% do problema...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então... Faltaram as respostas às perguntas abaixo.

Por via das dúvidas, poste o código de uma destas inserções e diga qual o banco de dados está utilizando.

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

horacio2009, poste SOMENTE o código da parte que faz o INSERT. Todo o código acima foi excluído, porque é grande demais e não faz sentido. Também, quando for postar, retire este monte de quebra de linha, porque fica enorme o código sem necessidade.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

então, o insert é feito pelo cliente...isto está OK...realizei vários testes , todos eles bem sucedidos...

o problema é na alteração do registro, em um determinado campo, pois o mesmo demora...preciso clicar umas 4, ou 5 vezes no admim para aparecer (ou desaparecer)o valor alterado, aí, como consequencia, a ficha fica livre, e acessos ou simultaneos, ou em momentos próximos,retorna a mesma ficha, pois o campo que identifica como "em uso" demora a ser preenchido...

nesse caso, não sei se é configuração do banco de dados, ou se eu posso complementar a query com algum atributo de forma atualizar mais rapidamente...

 


<?php



include '../conexao.php';

$sql = mysql_query

("UPDATE negociacao SET capture='$cripto' WHERE codigo= '$codigo_'") or die (mysql_error());

mysql_close ($db);

?>

<?php

//aqui ele limpa a capture dos outros clientes...

include '../conexao.php';

$sql = mysql_query

("UPDATE negociacao SET capture='' , hora_='$hora_ligacao' WHERE codigo <>'$codigo_' AND capture='$cripto'") or die (mysql_error());

mysql_close ($db);



?>


=======================================
outra query mais abaixo


<?php



if($telefone ="" )$telefone_principal="<font color='red'>$tel2_</font>"; else $telefone_principal="$telefone_";

//echo"<br>o telefone disponível é $telefone_principal<br>";



if($telefone_ <> "")$referencia="$telefone_"; else $referencia="$cpf_"; 

//echo"a referencia na qual se baseia a pesquisa e travamento de clientes é: <b>$referencia</b>";

include '../conexao.php';

$sql = mysql_query

("UPDATE  negociacao SET capture=''  WHERE capture ='$cripto'")

 or die (mysql_error());

mysql_close ($db);

?>

////////////////////

<?php















include '../conexao.php';

$sql = mysql_query

("UPDATE  negociacao SET capture='$cripto'  WHERE cpf like '%".$referencia."%' OR telefone LIKE '%".$referencia."%' ")

 or die (mysql_error());

mysql_close ($db);



?>
//////////////////////////////

<?php 



include '../conexao.php'; ?>

<?php 

if($cpf_ != "" && $telefone_ !="") 

$sql = mysql_query ("UPDATE  negociacao SET capture=''  WHERE capture ='$cripto'")  or die (mysql_error());

mysql_close ($db);

?>









<?php 

include '../conexao.php'; 

if($cpf_ != "" && $telefone_ !="")

$sql = mysql_query

("UPDATE  negociacao SET capture='$cripto'  WHERE cpf like '%".$cpf_."%' OR telefone LIKE '%".$telefone_."%' ")

 or die (mysql_error());

 mysql_close ($db);

?>





<?php 

include '../conexao.php'; 

if($cpf_ =="")

$sql = mysql_query

("UPDATE  negociacao SET capture='$cripto'  WHERE telefone LIKE '%".$telefone_."%' ")

 or die (mysql_error());

 mysql_close ($db);



?>


<?php

//aqui ele limpa a capture dos outros clientes...

include '../conexao.php';

$sql = mysql_query

("UPDATE negociacao SET capture='' , hora_='$hora_ligacao' WHERE codigo <>'$codigo_' AND capture='$cripto'") or die (mysql_error());

mysql_close ($db);



?>



 

enfim...sei que tem muitos comandos parecidos, porém, ainda que seja erro no programação, não deveria o programa, la no servidor, ou dar mensagem de erro, OU realizar todos os comandos acima, mas, essa lentidão???

essa demora pode ser causada pelos inumeros pedidos de alteração???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, o problema é na forma como a query está sendo montada. Vou mover para o fórum de MySQL. De qualquer forma, poste a estrutura das tabelas e explique porque utiliza LIKE (que é realmente muito lento).

 

Tópico Movido

PHP http://forum.imasters.com.br/public/style_emoticons/default/seta.gif MySQL

Compartilhar este post


Link para o post
Compartilhar em outros sites

entendi...

mas o like, pode gerar esse "retardo" na atualização do tabela, acessando pelo php myadmin?ainda que seja mais lento que uma query sem o like, demora TANTO assim???

no caso, qual o subistituto mais rápido para o like???

caramba, perguntei muito agora!! rsrs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rafael, em média, 7 segundos olhando pelo phpmyadmim, mas provavelmente deve ter um tempo pouca coisa maior, porque eu altero o registro, mudo a aba, e tal...

porém, o problema é que são vários operadores fazendo essas alterações e puxando cadastros novos e tal, e esse atraso, acaba gerando fichas iguais para operadores diferentes...e isso acaba melando toda a ideia disso...

bom, vou postar a estrutura da tabela em questão para avaliações...

 


CREATE TABLE `negociacao` (
  `codigo` int(11) NOT NULL auto_increment,
  `capture` varchar(250) collate latin1_general_ci NOT NULL,
  `hora_` varchar(250) collate latin1_general_ci NOT NULL,
  `telefone` varchar(200) collate latin1_general_ci NOT NULL,
  `nome` varchar(200) collate latin1_general_ci NOT NULL,
  `cpf` varchar(200) collate latin1_general_ci NOT NULL,
  `cnpj` varchar(250) collate latin1_general_ci NOT NULL,
  `data` timestamp NOT NULL default CURRENT_TIMESTAMP,
  `origem` varchar(200) collate latin1_general_ci NOT NULL,
  `situacao` varchar(200) collate latin1_general_ci NOT NULL,
  `confirmacao` varchar(200) collate latin1_general_ci NOT NULL,
  `conclusao` varchar(200) collate latin1_general_ci NOT NULL,
  `comentario` text collate latin1_general_ci NOT NULL,
  `produto` varchar(200) collate latin1_general_ci NOT NULL,
  `dia_agendamento` int(11) NOT NULL,
  `mes_agendamento` int(11) NOT NULL,
  `ano_agendamento` int(11) NOT NULL,
  `hora_agendamento` int(11) NOT NULL,
  `minuto_agendamento` int(11) NOT NULL,
  `codigo_user` int(11) NOT NULL,
  `data_retorno` time NOT NULL,
  `data_origem` varchar(200) collate latin1_general_ci NOT NULL,
  `inf_nao_localizado` text collate latin1_general_ci NOT NULL,
  `ficha` text collate latin1_general_ci NOT NULL,
  `numero` int(11) NOT NULL,
  `relacao` varchar(250) collate latin1_general_ci NOT NULL,
  `ja_ligou` char(12) collate latin1_general_ci NOT NULL default 'n',
  `sexo` char(12) collate latin1_general_ci NOT NULL default 'm',
  `estado_civil` char(12) collate latin1_general_ci NOT NULL default 's',
  `profissao` varchar(200) collate latin1_general_ci NOT NULL,
  `estado` varchar(200) collate latin1_general_ci NOT NULL,
  `dia_nasc` int(11) NOT NULL,
  `mes_nasc` int(11) NOT NULL,
  `ano_nasc` int(11) NOT NULL,
  `origem_boleto` varchar(250) collate latin1_general_ci NOT NULL,
  `obs_boleto` varchar(250) collate latin1_general_ci NOT NULL,
  `1` varchar(250) collate latin1_general_ci NOT NULL,
  `2` varchar(250) collate latin1_general_ci NOT NULL,
  `3` varchar(250) collate latin1_general_ci NOT NULL,
  `4` varchar(250) collate latin1_general_ci NOT NULL,
  `proposta` varchar(250) collate latin1_general_ci NOT NULL,
  `email` varchar(250) collate latin1_general_ci NOT NULL default 'ver ficha',
  `grupo` varchar(250) collate latin1_general_ci NOT NULL,
  `cota` varchar(250) collate latin1_general_ci NOT NULL,
  `id_vendas` varchar(250) collate latin1_general_ci NOT NULL,
  `nome_empresa` varchar(250) collate latin1_general_ci NOT NULL,
  `mostrar` varchar(250) collate latin1_general_ci NOT NULL,
  `passagem` int(11) NOT NULL,
  `pgto1` varchar(25) collate latin1_general_ci NOT NULL,
  `backup` text collate latin1_general_ci NOT NULL,
  PRIMARY KEY  (`codigo`)
)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola aimgo. comigo aconteceu algo meio parecido, eu fiz uma consulta no phpmyadmin, e depois botei para listar todos os campos,

e com isso ele demrou e nao respondeu nda, so uma tela em branco,

descobri que era a memoria definida para operacoes com mysql que estava dando problema;

rosa o phpinfo() no seu servidor e tenta descobrir o valor da variavel memory_limit().

 

link abaixo

http://br2.php.net/manual/pt_BR/ini.core.php#ini.memory-limit

Pela quantidade de informaçoes da sua tabela, pode ser algo referente aisso tambem.

abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com esse seu 'super tabelao de guerra' você nao vai chegar mto longe, principalmente sem colocar index nos pontos de juncao e where.

 

refaça de maneira adequada e com os tipos adequados

 

`dia_agendamento` int(11) NOT NULL,

`mes_agendamento` int(11) NOT NULL,

`ano_agendamento` int(11) NOT NULL,

`hora_agendamento` int(11) NOT NULL,

`minuto_agendamento` int(11) NOT NULL,

 

nao pode...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.