结果缓慢 - 没有其他错误,有什么问题?

时间:2011-07-09 22:22:15

标签: php mysql optimization

我使用PHP和MySQL来管理我的服务器/网站上的内容(我有一个视频网站) 最近,任何页面的结果开始变得非常缓慢,与其他网站不同 服务器的CPU和内存为0-5%,因此开销不是问题 我所做的是查询数据库中的条目,然后显示它们,以及它们的thumbanil /得分和其他信息 当我打开一个结果页面时,它不会立即得到所有结果,它们会逐个加起来 这是正常的吗?!当然不是......要更好地理解:发生的事情是标题加载,然后内容(链接到其他页面的许多缩略图)开始加载,但是像这样:前3个拇指出现,然后是下4个,然后是接下来2,然后是4,然后......直到结束,最后我的页面底部加载,意味着联系链接和ToS。

有什么想法可以让你想到吗?

我提到我的服务器具有良好的硬件条件,强大的CPU和大量的RAM,它们都至少使用了%,并且还提到我的服务器的ping大约是40ms(我居住在中欧,服务器是在芝加哥)

我的数据库包含大约10,000个条目,每个页面显示24个条目,每个条目由这个php脚本处理:

while($arr=mysql_fetch_array($result)){
    ?>
<div class="thumb" align="center">
<?php
    echo "<a href='videos/".$arr['title'].".php'>";
    ?>
<img src="thumbs/<?php  
$title=basename($arr['address']);
$title=substr($title,0,strlen($title)-4); 
echo $title;
?>_5.jpg" onMouseOver="startThumbSlide('<?php echo $title; ?>', '5', 'thumbs/<?php echo $title.'_'; ?>')" onMouseOut='stopThumbSlide();' id='pic_<?php echo $title; ?>'  width="200px" height="150px"/>
<br />
<div align="left">
<?php
rating_form($arr['address']);
echo '</div>';
echo "</a>";
echo "<a href='videos/".$arr['title'].".php' class=\"thumba\"     onMouseOver=\"startThumbSlide('".$title."', '5', 'thumbs/".$title.'_'."')\" onMouseOut='stopThumbSlide();'>".$arr['title']."</a><br>
<span style=\"font: normal 10px verdana; color:#999;\">Viewed: ".$arr['views']." times</span>".'
<span style="float:right; font: normal 10px verdana; color:#999;">'.$arr['lenght'].'</span>    </center>'."
</div>";}

提前一百万次感谢您给我的任何建议! 干杯!

PS:我必须补充一点,流量没有变化,实际上网站在2周前运行得更好,当时我的流量增加了一倍,而且我的服务器上没有更改任何设置,只是轻微的脚本更改,但我我不记得在这件事发生时我究竟改变了什么......

编辑:这是我用来从数据库中获取数据的MySQL查询,包括搜索字符串操作,搜索字符串变量是$ s,此代码是在我剥离标签并修剪它之后发出的。
这是代码:

$pattern='/[^a-zA-Z0-9]+/';
$s=preg_replace($pattern,' ',$s);
$query="SELECT
    *, 
    CASE when title like '%".$s."%' then 1 else 0 END as titlematch, 
    CASE when tags like '%".$s."%' then 1 else 0 END as tagsmatch,
    MATCH (title, tags) AGAINST ('*".$s."*' IN BOOLEAN MODE) AS relevance
FROM videos
WHERE
    (title like '%".$s."%' OR
    tags like '%".$s."%' OR
    MATCH (title, tags) AGAINST ('*".$s."*' IN BOOLEAN MODE))
AND page=1
ORDER by
    titlematch desc, tagsmatch desc, relevance desc
";

$all = mysql_query($query);

$total = mysql_num_rows($all);
if($total>0){
$n1=$start-1;

$result = mysql_query($query. " LIMIT $n1,$max");

while($arr=mysql_fetch_array($result)){
[...This part is already posted...]

另外,我想补充一点,我目前有2个索引,一个用于索引字段,一个用于标题和标签字段。

1 个答案:

答案 0 :(得分:2)

简短的回答是,诊断这些问题非常困难。但是有一些工具可以解决这个问题,并引导你到一个更具体的领域来关注。

首先,我将从基本的互联网速度测试开始,例如:http://www.speedtest.net/验证其他人的网页实际上是否正在快速加载。

然后,只是为了踢,让你国外的人尝试加载你的网站,看看它们是否也很慢。您可以通过外部代理加载您的站点来自己尝试。我建议所有这一切,因为那些控制管道的人会知道使用大量带宽的东西,例如视频网站。

虽然听起来像是加载缓慢的HTML,而不一定是服务器处理速度,但检查数据库速度并不会有什么坏处。我使用像phpMyAdmin这样的工具,然后运行你的SQL查询,看看结果是否快速返回。如果它们很慢,则可能是编写效率低下的SQL查询,或者需要调整的某些数据库设置。只是在Google搜索“mySQL突然非常慢”时,会发现许多帖子只需更新到最新版本的mySQL即可解决。

这些都是我现在拥有的所有想法。如果你发现了什么,请告诉我。