Ir ao conteúdo
  • Cadastre-se

Sobrecarga Fatal error: Maximum execution time of 30 seconds exceeded


Ir à solução Resolvido por Arley Fellipe,

Posts recomendados

Olá pessoal, tenho uma dúvida em relação a sobrecarga no DATABASE meu site está em localhost e vi que tive uma certa sobrecarga no meu DATABASE, ele tem 29 tabelas e recentemente em uma consulta sql que faz uma consulta em 3 tabelas de uma vez só depois compara com uma outra consulta sql que consulta 2 tabelas e pega os valores da primeira consulta e subtrai com o resultado da segunda consulta sql.

Esse código faz o seguinte verificar quantos posts do usuário logado e dos amigos ainda não viu, código:

$sql_visual_msgs = mysql_query("SELECT `A`.*, `C`.*, `V`.* FROM amigos A INNER JOIN conversas C left outer JOIN visual_msg VON A.amigo = C.remetente_id  WHERE `A`.usuario = '".$_SESSION['UsuarioID']."' AND  V.id_msg = (SELECT COUNT(id_msg)FROM visual_msg WHERE id_usur = '".$_SESSION['UsuarioID']."' AND id_msg = C.cod_conversa)");$total_visual_msg = mysql_num_rows($sql_visual_msgs);if($total_visual_msg >=1){	$sql_msg_moment = mysql_query("SELECT `AM`.*, `CO`.* FROM amigos AM INNER JOIN conversas CO ON AM.amigo = CO.remetente_id  WHERE `AM`.usuario = '".$_SESSION['UsuarioID']."' AND CO.remetente_id = '".$_SESSION['UsuarioID']."'");$total_visual_msg_nao_registrado = mysql_num_rows($sql_msg_moment);echo '<table bgcolor="#FF0000"><tr><td><font color="#FFFFFF">';echo $total = $total_visual_msg_nao_registrado - $total_visual_msg; echo'</font></td></tr></table>';}else{	echo'<p> </p>';		}

Existe outra maneira de fazer isso sem usar consulta sql, ou seja, sem usar o database porque ele fica pesado quando faço este tipo de consulta sql.

Com relação a sobrecarga quem é o responsável o servidor e suas configurações como CPU, e memória ou o usuário que está acessando o site no e seu CPU ou memória é de baixo desempenho.

Eu já chequei várias vezes e percebi um ERRO neste caso a consulta 1:

$sql_visual_msgs = mysql_query("SELECT `A`.*, `C`.*, `V`.* FROM amigos A INNER JOIN conversas C left outer JOIN visual_msg VON A.amigo = C.remetente_id  WHERE `A`.usuario = '".$_SESSION['UsuarioID']."' AND  V.id_msg = (SELECT COUNT(id_msg)FROM visual_msg WHERE id_usur = '".$_SESSION['UsuarioID']."' AND id_msg = C.cod_conversa)");$total_visual_msg = mysql_num_rows($sql_visual_msgs);

Percebi que esta consulta verifica se não tem registro é ao contrário, ao em vez de consultar registro ela pega registro de uma tabela e procura se tem na outra.

A consulta funciona quando a tabela "visual_msg" está vazia mas quando está com registros, ou seja, os registros da tabela "conversas" já estão registradas na tabela "visual_msg" ai aparece este erro "Fatal error: Maximum execution time of 30 seconds exceeded"

Minha pergunta é para complementar: Esta consulta fica inválida ou a consulta fica sem direção para terminar e quando os 30s padrão do php acaba o erro acontece?

Link para o comentário
Compartilhar em outros sites

  • Solução

PROBLEMA RESOLVIDO:

 

O código estava ficando inválido quando a consulta 1 tentava consultar a tabela visual_msg que estava com algum registro, a consulta 1 só funcionava quando a consulta visual_msg estava vazia, esta consulta 1 faz o contrário verificar se os registro da tabela conversa tem na tabela visual fiz muitas analises e verifiquei um erro na consulta 1 no caso uma linha inteira foi refeita veja o código que foi corrigido:

<?php$sql_visual_msgs = mysql_query("SELECT `A`.*, `C`.*, `V`.* FROM amigos A INNER JOIN conversas C left outer JOIN visual_msg VON A.amigo = C.remetente_id  WHERE `A`.usuario = '".$_SESSION['UsuarioID']."' AND  C.remetente_id = '".$_SESSION['UsuarioID']."' AND V.id_msg = C.cod_conversa AND V.id_usur = '".$_SESSION['UsuarioID']."'");$total_visual_msg = mysql_num_rows($sql_visual_msgs);if($total_visual_msg >=1){	$sql_msg_moment = mysql_query("SELECT `AM`.*, `CO`.* FROM amigos AM INNER JOIN conversas CO ON AM.amigo = CO.remetente_id  WHERE `AM`.usuario = '".$_SESSION['UsuarioID']."' AND CO.remetente_id = '".$_SESSION['UsuarioID']."'");$total_visual_msg_nao_registrado = mysql_num_rows($sql_msg_moment);$total = $total_visual_msg_nao_registrado - $total_visual_msg;if($total >=1){echo '<table bgcolor="#FF0000"><tr><td><font color="#FFFFFF">';echo $total; echo'</font></td></tr></table>';}if($total ==0){echo'<p> </p>';		}}?>

  Então já que ninguém respondeu tentei solucionar o problema e consegui resolver e quem tiver o mesmo problema tá ai a solução!

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...