Ir para conteúdo



Sobrecarga no servidor PHP


  • Por favor, faça o login para responder
3 respostas neste tópico

#1 fabiobritors

fabiobritors
  • Membros
  • 1 posts

Postado 03 January 2012 - 09:57 AM

Bom dia pessoal,

meu nome é Fabio Brito e gostaria da ajuda de vocês quanto a um problema que estou enfrentando com uma aplicação hospedada na Locaweb.

Meu site é de uma imobiliária, portanto utiliza de PHP e MYSQL para fazer buscas de imóveis no site.

O problema é que a Locaweb esta ameaçando tirar meu site do ar pois está causando sobre carga no servidor compartilhado deles e alegam que o problema está em nosso código. Meu site tem em torno de 15Mil acessos mês então este não é o problema.

Abaixo segue o código PHP da página mais requisitada do site:
<? include("inc/config.php"); ?>
<?
/* PAGINACAO */
  
$_SESSION['regs_pp'] = 6;
  
!isset($_GET["pg"]) ? $pg=1 : $pg=$_GET["pg"];
$comeca_em = ($pg-1)*$_SESSION['regs_pp'];
 
// paramentros para navegacao entre os resultados
$param = '';
if( isset($_GET['favoritos']) )  { $param.="favoritos=true&"; }
if( isset($_GET['lancamentos']) && $_GET['lancamentos']=='true' )  { $param.="lancamentos=true&"; }
if( isset($_GET['estagio']) )  { $param.="estagio=".$_GET['estagio']."&"; }
if( isset($_GET['finalidade']) )   { $param.="finalidade=".$_GET['finalidade']."&"; }
if( isset($_GET['tipo']) )  { $param.="tipo=".$_GET['tipo']."&"; }
if( isset($_GET['busca_cidade']) ) { $param.="busca_cidade=".urlencode($_GET['busca_cidade'])."&"; }
if( isset($_GET['dormitorio']))   { $param.="dormitorio=".$_GET['dormitorio']."&"; }
if( isset($_GET['garagem']) )  { $param.="garagem=".$_GET['garagem']."&"; }
if( isset($_GET['de1']) ) { $param.="de1=".$_GET['de1']."&"; }
if( isset($_GET['de2']) ) { $param.="de2=".$_GET['de2']."&"; }
if( isset($_GET['ate1']) ) { $param.="ate1=".$_GET['ate1']."&"; }
if( isset($_GET['ate2']) ) { $param.="ate2=".$_GET['ate2']."&"; }
if( isset($_GET['pre&#231;o']) ) { $param.="pre&#231;o=".$_GET['pre&#231;o']."&"; }
if( isset($_GET['preco2']) ) { $param.="preco2=".$_GET['preco2']."&"; }
if( !empty($_GET['area']) )  { $param.="area=".$_GET['area']."&"; }
if( !empty($_GET['o_field']) )   { $param.="o_field=".$_GET['o_field']."&"; }
if( !empty($_GET['o_ad']) )  { $param.="o_ad=".$_GET['o_ad']."&"; }
// o param de pagnacao dos bairros esta no loop do select
 
 
/*
BUSCA
---------------------------------------------------------------------
*/
 
$sql_busca="";
 
// PALAVRA-CHAVE
if ( !empty($_GET['codigo']) && is_numeric($_GET['codigo']) ) {
die("&lt;script>window.location='detalhes.php?codigo=".$_GET['codigo']."'</script>");
}
 
else if ( !empty($_GET['placa']) && is_numeric($_GET['placa']) ) {
die("&lt;script>window.location='detalhes.php?codigo=".$_GET['placa']."'</script>");
}
 
else
{
 
// CLASSIFICACAO  
if (!empty($_GET["finalidade"]) && $_GET["finalidade"]=='venda') { $sql_busca .= "  AND INSTR(imo.STATUS,'VENDA')>0 "; }  
else if (!empty($_GET["finalidade"]) && $_GET["finalidade"]=='locacao') { $sql_busca .= " AND INSTR(imo.STATUS,'LOCA&#199;&#195;O')>0 "; }  
//else if (!empty($_GET["finalidade"]) && $_GET["finalidade"]=='vl') { $sql_busca .= " "; }  
 
// ESTAGIO OBRA
if(!empty($_GET['estagio'])) { $vfiltros[] = array('estagio',$_GET['estagio']); }
if ( !empty($_GET['estagio']) && $_GET['estagio']==2 )   { $sql_busca.=" AND imo.ESTAGIO_OBRA='Lan&#231;amento' OR imo.ESTAGIO_OBRA='Revenda'";  }
if ( !empty($_GET['estagio']) && $_GET['estagio']==4 )   { $sql_busca.=" AND imo.ESTAGIO_OBRA='Pronto' OR imo.ESTAGIO_OBRA='Revenda' OR imo.ESTAGIO_OBRA='Lan&#231;amento'"; }
 
// TIPO DE IMOVEL
if ( !empty($_GET['tipo']) ) {
$sql_busca.=" AND imo.CODIGO_CT=".$_GET['tipo'];
$vfiltros[] = array('tipo',$_GET['tipo']);
}
 
// CIDADE
if ( !empty($_GET['busca_cidade']) ) {
$sql_busca.=" AND imo.cidade='".urldecode($_GET['busca_cidade'])."' ";
$vfiltros[] = array('busca_cidade',$_GET['busca_cidade']);
}
 
// AREA
if ( !empty($_GET['area']) ) {
$v_area = split('-',$_GET['area']);
$sql_busca.=" AND (imo.AREA_PRIVATIVA>=".$v_area[0]." and  imo.AREA_PRIVATIVA<=".$v_area[1].") ";
$vfiltros[] = array('area',$_GET['area']);
}
 
// pre&#231;o
if ( !empty($_GET['pre&#231;o']) ) {
$v_preco = split('-',$_GET['pre&#231;o']);
$sql_busca.=" AND (imo.VLR_VENDA>=".($v_preco[0]*1000)." and  imo.VLR_VENDA<=".($v_preco[1]*1000).") ";
$vfiltros[] = array('pre&#231;o',$_GET['pre&#231;o']);
}
 
// pre&#231;o
if ( !empty($_GET['preco2']) ) {
$v_preco = split('-',$_GET['preco2']);
$sql_busca.=" AND (imo.VALOR_ALUGUEL>=".($v_preco[0])." and  imo.VALOR_ALUGUEL<=".($v_preco[1]).") ";
$vfiltros[] = array('preco2',$_GET['preco2']);
}
 
 
// FAVORITOS
if ( !empty($_GET['favoritos']) )
{
$sqlfav = "";
if ( isset($_COOKIE['favoritos']) )
{
$cods=split(",",$_COOKIE['favoritos']);
//print_r($cods);
$sqlfav .=" AND (";
for($i=count($cods)-1;$i>=0;$i--){
if(trim($cods[$i])!='') {
$sqlfav .= " imo.CODIGO=".$cods[$i];
if(count($cods)>0) { $sqlfav .= " OR "; }
}
}
$sqlfav = rtrim($sqlfav, "OR ");
$sqlfav .=" )";
//echo $sqlfav;
}
$sql_busca .= $sqlfav;
if (str_replace(" ","",$sqlfav)!="AND()") $sql_busca .= $sqlfav; else $sql_busca = ' AND 1=2 ';
}
 
// BAIRROS SELECIONADOS
if ( !empty($_GET['bairros']) ) {
$total = count($_GET['bairros']);
$sql_busca .= " AND (";
foreach ($_GET['bairros'] as $value)
{
$sql_busca .= " imo.BAIRRO IN ('". urldecode($value) ."') ";
$total--;
if ($total!=0) { $sql_busca .= " OR "; }
 
//PAGINACAO
$param.="bairros[]=".urlencode($value)."&";
 
//filtros
$vfiltros[] = array('bairros[]',$value);
 
}
$sql_busca .= " ) ";
}
 
// DORM
if (!empty($_GET['dormitorio']) && $_GET['dormitorio']==1) { $sql_busca .= " AND imo.DORMITORIO=1"; }  
if (!empty($_GET['dormitorio']) && $_GET['dormitorio']==2) { $sql_busca .= " AND imo.DORMITORIO=2"; }  
if (!empty($_GET['dormitorio']) && $_GET['dormitorio']==3) { $sql_busca .= " AND imo.DORMITORIO=3"; }  
if (!empty($_GET['dormitorio']) && $_GET['dormitorio']==4) { $sql_busca .= " AND imo.DORMITORIO>=4"; }  
if (!empty($_GET['dormitorio'])) {
$vfiltros[] = array('dormitorio',$_GET['dormitorio']);
}  
 
// GARAGEM
if (!empty($_GET['garagem']) && $_GET['garagem']==1) { $sql_busca .= " AND imo.QUANTITADE_GAR>=1"; }  
if (!empty($_GET['garagem']) && $_GET['garagem']==2) { $sql_busca .= " AND imo.QUANTITADE_GAR>=2"; }  
if (!empty($_GET['garagem']) && $_GET['garagem']==3) { $sql_busca .= " AND imo.QUANTITADE_GAR>=3"; }  
if (!empty($_GET['garagem']) && $_GET['garagem']==4) { $sql_busca .= " AND imo.QUANTITADE_GAR>=4"; }
if (!empty($_GET['garagem'])) {
$vfiltros[] = array('garagem',$_GET['garagem']);
}
 
// FAIXA DE PRE&#199;O SELECIONADA
if( !empty($_GET['finalidade']) && $_GET['finalidade']=='locacao' ) {
if (!empty($_GET['de2'])) { $sql_busca .= " AND imo.VALOR_ALUGUEL>=".$_GET['de2']." "; }  
if (!empty($_GET['ate2'])) { $sql_busca .= " AND imo.VALOR_ALUGUEL<=".$_GET['ate2']." ";  }  
}else{
if (!empty($_GET['de1'])) { $sql_busca .= " AND imo.VLR_VENDA>=".$_GET['de1']." "; }  
if (!empty($_GET['ate1'])) { $sql_busca .= " AND imo.VLR_VENDA<=".$_GET['ate1']." ";  }  
}
 
}
/*
END BUSCA
---------------------------------------------------------------------
*/
  
 
  
/*
ORDENAR OS RESULTADOS
---------------------------------------------------------------------
*/
if(isset($_GET["ordem"])) {
$_SESSION["ordem"]==$_GET["ordem"] ? $_SESSION["ordem"] = $_SESSION["ordem"] : $_SESSION["ordem"] = $_GET["ordem"];
} elseif(!isset($_SESSION["ordem"])) {
$_SESSION["ordem"] = "VLR_VENDA DESC, VALOR_ALUGUEL DESC";
}
  
/*
---------------------------------------------------------------------
*/
 
$sql = "SELECT DISTINCT
imo.PLACA, imo.CODIGO, imo.CODIGO_CT, cat.CATEGORIA, cat.GRUPO, imo.STATUS, imo.BAIRRO, imo.CIDADE,
imo.DORMITORIO AS DORM, imo.ESTAGIO_OBRA,
imo.SUITE AS SUITE,
imo.QUANTITADE_GAR AS VAGA,
imo.LANCAMENTO,
imo.AREA_PRIVATIVA AS AREA,  
imo.AREA_TOTAL,  
imo.VLR_VENDA,
imo.VALOR_ALUGUEL,
imo.EMPREENDIMENTO
FROM CADIMO imo  
LEFT JOIN CADCAT cat ON cat.CODIGO=imo.CODIGO_CT
LEFT JOIN CADCLI cli ON cli.CODIGO_C=imo.CODIGO_C
WHERE
imo.VER_WEB='Sim'
AND (imo.STATUS='VENDA' OR imo.STATUS='LOCA&#199;&#195;O')
$sql_busca
ORDER BY ".$_SESSION['ordem']."
";
 
//echo $sql;
 
$sql_limit = " LIMIT ".$comeca_em.",".$_SESSION['regs_pp'];
$rst	 = mysql_query($sql) or die(mysql_error());
$total_reg = mysql_num_rows($rst);
 
 
/*
TITULO NAVEGADOR
---------------------------------------------------------------------
*/
 
$tit_browser  = " ";
$tit_h="";
 
if (!empty($_GET["finalidade"]) && $_GET["finalidade"]=='locacao') { $tit_browser .= 'Im&#243;veis para alugar ';}  
else if (!empty($_GET["finalidade"]) && $_GET["finalidade"]=='venda') { $tit_browser .= 'Im&#243;veis &#224; venda '; }  
else if (!empty($_GET["favoritos"]) ) { $tit_browser .= 'Im&#243;veis Favoritos '; }  
else if ( !empty($_GET['estagio']) && $_GET['estagio']==1 )	{ $tit_browser .=" Entrega At&#233; 1 Ano "; }
else if ( !empty($_GET['estagio']) && $_GET['estagio']==2 )	{ $tit_browser .=" Lan&#231;amentos"; }
else if ( !empty($_GET['estagio']) && $_GET['estagio']==3 )	{ $tit_browser .=" Pr&#233;-Lan&#231;amentos"; }
else if ( !empty($_GET['estagio']) && $_GET['estagio']==4 )	{ $tit_browser .=" Prontos / Usados"; }
else   { $tit_browser .= 'Im&#243;veis '; }
 
if (!empty($_GET["tipo"]))
{
$sqlc = mysql_query("SELECT CATEGORIA FROM CADCAT WHERE CODIGO=".$_GET["tipo"]);
if(mysql_num_rows($sqlc)>0)
{
$st = mysql_fetch_array($sqlc);
$tit_browser .=' '.Maiusculo($st["CATEGORIA"]);
}
}
if (!empty($_GET["busca_cidade"]))
{
$tit_browser .=' em '.urldecode(Maiusculo($_GET["busca_cidade"]));
}
?>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<? include("inc/layout/meta.php"); ?>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="description" content="<?= $tit_browser; ?> - <?= CFG_TITLE ?>" />
<meta name="keywords" content="imobiliaria porto alegre, imoveis porto alegre, fael imoveis" />
<meta name="classification" content="imoveis , imobiliaria">  
<title><?= $tit_browser; ?> - <?= CFG_TITLE; ?></title>
<link href="inc/css/styles.css" rel="stylesheet" type="text/css" />
&lt;script type="text/javascript" src="inc/js/jquery.js"></script>
&lt;script type="text/javascript" src="inc/js/jquery.ui.js"></script>
&lt;script type="text/javascript" src="inc/js/jquery.cycle.js"></script>
&lt;script type="text/javascript" src="inc/js/jquery.tooltip.js"></script>
&lt;script type="text/javascript" src="inc/js/scripts.js"></script>
&lt;script type="text/javascript" src="inc/js/validaform.js"></script>
</head>
 
<body>
 
<div id="container">
  
  <? include("inc/layout/header.php"); ?>
  
  <? include("inc/layout/busca.php"); ?>
  
  <? include("inc/layout/animacao.php"); ?>
  
 
  
  <div id="mainContent">
 
<div id="leftContent">
<? include("inc/layout/filtro.php"); ?>
<? include("inc/layout/servicos.php"); ?>
</div><!-- end #leftContent -->
 
<div id="rightContent">
 
<h1><?php echo $tit_browser; ?></h1>
 
<div class="paginacao">
<!--<p class="left">Total de im&#243;veis encontrados: <strong><?= $total_reg; ?></strong></p>-->
<? if($total_reg>0) { ?>
<select onchange="window.location='<?=current_page()?>?<?=$param?>ordem='+this.value">
<option value="">Ordenar por:</option>
 
<optgroup label="Pre&#231;o">
<? if ($_GET['finalidade']=='locacao') { ?>
<option value="VALOR_ALUGUEL ASC" <?= $_SESSION["ordem"]=="VALOR_ALUGUEL ASC" ? 'selected="selected"' : '' ?> >Menor Pre&#231;o</option>
<option value="VALOR_ALUGUEL DESC" <?= $_SESSION["ordem"]=="VALOR_ALUGUEL DESC" ? 'selected="selected"' : ''  ?>>Maior Pre&#231;o</option>
<? } else { ?>
<option value="VLR_VENDA ASC" <?= $_SESSION["ordem"]=="VLR_VENDA ASC" ? 'selected="selected"' : '' ?> >Menor Pre&#231;o</option>
<option value="VLR_VENDA DESC" <?= $_SESSION["ordem"]=="VLR_VENDA DESC" ? 'selected="selected"' : ''  ?>>Maior Pre&#231;o</option>
<? } ?>
</optgroup>
 
<optgroup label="&#193;rea">
<option value="imo.AREA_TOTAL ASC" <?= $_SESSION["ordem"]=="imo.AREA_TOTAL ASC" ? 'selected="selected"' : ''  ?>>Menor &#193;rea</option>
<option value="imo.AREA_TOTAL DESC" <?= $_SESSION["ordem"]=="imo.AREA_TOTAL DESC" ? 'selected="selected"' : ''  ?>>Maior &#193;rea</option>
</optgroup>
 
<optgroup label="Dormit&#243;rios">
<option value="imo.DORMITORIO ASC" <?= $_SESSION["ordem"]=="imo.DORMITORIO ASC" ? 'selected="selected"' : ''  ?>>Menos Dormit&#243;rios</option>
<option value="imo.DORMITORIO DESC" <?= $_SESSION["ordem"]=="imo.DORMITORIO DESC" ? 'selected="selected"' : ''  ?>>Mais Dormit&#243;rios</option>
</optgroup>
</select>
<? } ?>
</div><!-- end .paginacao -->
 
<div class="imoveis">
<?
if($total_reg>0) {
$i=0;
$rs = mysql_query($sql." ".$sql_limit) or die(mysql_error());
while($imovel=mysql_fetch_array($rs)) {
$i++; $quebra =  ($i%2==0) ? ' quebra' : '';
include("inc/layout/box.php");
}
}else if( !empty($_GET["favoritos"]) && $total_reg==0 ){
echo "<br />Voc&#234; n&#227;o possui im&#243;veis salvos como favorito. <br />";
}else{
echo "<br />N&#227;o existem im&#243;veis para o filtro selecionado. Refa&#231;a seus filtros e tente novamente.<br />";
}
?>
</div><!-- end .imoveis -->
 
<? if($total_reg>6) { ?>
<div class="paginacao paginacao-bottom">
<!--<p class="left">Total de im&#243;veis encontrados: <strong><?= $total_reg; ?></strong></p>-->
<p class="right"><?= escreve_paginacao($param,$pg,$_SESSION['regs_pp'],$total_reg); ?></p>
</div><!-- end .paginacao -->
<? } ?>
 
</div><!-- end #rightContent -->
 
  </div><!-- end #mainContent -->
 
</div><!-- end #container -->
 
<? include("inc/layout/footer.php"); ?>
</body>
</html>

Se alguém puder me ajudar ficarei muito agradecido.

Obrigado a todos.



#2 henrico

henrico
  • Moderadores
  • 734 posts

Postado 03 January 2012 - 01:25 PM

amigo o que posso te dizr a pricipio é o seguinte, existem sites qeu medem a velocidade doe outros sites ou seja a velocidade a partir da solicitação ate a resposta acredito eu
então vc deve fazer esse teste em um desses sites pra poder confirmar o que o povo da localweb falou posteriormente eu surgiro que vc teste a velocidade de cada link, pois
assim vc pode descobrir que rotina faz o teu sistema ficar mais lento e assim revidar essa parte do codigo.
Me da a impressão qeu vc acha que algum comando ou talvez alguma função emparticular é que esta atrasando o processamento, mas nao é isso, se isso ocorre
muito provavelmente seja um problema de rotinas mal elaboradas uma vez que provavelmente esse codigo trabalhe com quantidades muito grande de informaçãi

#3 Kim Pastro

Kim Pastro
  • Membros
  • 2 posts

Postado 04 January 2012 - 07:45 AM

Bom dia Fabio,

a sua classe ou script de conexão com o banco de dados está usando Singleton ? Caso não, pode ser um dos possíveis problemas, afinal um mesmo usuário abriria várias conexões com o banco, recomendaria (se conselho fosse bom... rsrs) utilizar uma classe com PDO ou algo similar.
Como está executando um select muito grande e exigindo um processamento relativamente alto do banco isso impacta diretamente na locaweb uma vez que o banco fica no servidor deles. Aqui na empresa havia um sistema em que o select era gigante demorando de 7 a 20 segundos pra retornar e consumia 100% do processamento do banco. Talvez um refatoramento já melhore.
Enfim, são alguns problemas possíveis de ocorrer.

Abraços.

#4 fernandoalls

fernandoalls
  • Membros
  • 50 posts

Postado 16 January 2012 - 06:44 AM

Bom dia,
Estarei ministrando um curso de PHP ORIENTADO A OBJETOS pelo site http://stoodos.com.b...ulate/course/99 o curso custa R$ 30,00 realmente é muito barato, entre lá e confirme sua presença para fevereiro, já estamos na segunda turma e realmente o aproveitamento está sendo muito bom. No curso ensino desde o php para iniciantes até o php orientado a objetos.

Abaixo um pouco sobre o que você aprenderá neste curso.



1 - Introdução ao PHP
1.1 História do PHP
1.2 O PHP e a sua área de aplicação


2 - Ambiente
1.1 Escolhendo as ferramentas para trabalhar
1.2 Preparando o ambiente
1.3 Testando o ambiente


3 - Aprendendo PHP do básico ao avançado
1.1 Delimitadores
1.2 Variáveis
1.3 Constantes
1.4 Variáveis globais
1.5 Operadores aritméticos
1.6 Operadores de comparação
1.7 Operadores lógicos
1.8 Estruturas de controle (if, swicht)
1.9 Laços de repetição (for, foreach, while, do while)
1.10 Resources para banco de dados
1.11 Functions
1.12 Algumas funções pré-definidas do php


4 - Aprendendo PHP Orientado a Objetos
1.1 Conceito de Orientação a Objetos
1.2 Conceito de classes e objetos
1.3 Criando a primeira classe
1.4 Métodos e Propriedades
1.5 Herança
1.6 Polimorfismo
1.7 Abstração
1.8 Modificadores de acesso
1.9 Palavra reservada self::
1.10 Constantes no PHP OO
1.11 Classe abstrata
1.12 Classe final
1.12 Método abstrato
1.13 Método final
1.14 Manipulação de métodos e classes
1.15 Associação e Agregação
1.16 Acesse banco de dados com PDO
1.17 Projeto final do curso


************************************************************

A cada aula que for realizada o aluno irá receber o material de estudo onde conterá, o material apresentado na aula sendo eles:

1 - Slides do curso com a matéria aprendida.
2 - Fontes do curso, exemplos de como funciona o que aprendeu.
3 - IDE de desenvolvimento.
4 - Ajuda na instalação do ambiente.

"Sem o C nós só teríamos Pasal, Obol e BASI."




0 usuário(s) está(ão) lendo este tópico

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)