Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[已解决] 一条SQL慢记录的解决方法

[复制链接]
flycatmei 发表于 2009-6-4 11:17:33 | 显示全部楼层 |阅读模式
看了boobycn的“一条SQL慢记录”的贴子,由于自己的BBS也有同样问题,困扰我好久了,现受启发,终于想到了要自己动手解决问题。在寻求到2位数据库高手的帮助下,已经完美解决问题。

硬件环境:独立主机
INTEL 至强 双核 1.86G *2
4Gb RAM
10000 RPM SAS硬盘146G*6 做RAID5
软件环境:
CENTOS 4.7 32位
MYSQL 5.0.45
apache 2.0
网络接入100M
DISCUZ 7.0 GBK + UCenter Home 1.5

SQL语句是:
SELECT p.* FROM uch_pic p ,uch_album a
WHERE a.friend='0' AND a.albumid=p.albumid  ORDER BY p.dateline DESC LIMIT 0,5;
主要是用于UCHome首页面5张幻灯片的显示,在根目录的index.php文件中。

一开始还可以,最近一段时间发现论坛和UCHome越来越慢,原来在线用户1000多都没问题,现在300多就卡得不得了,看了一下主机,IO非常,平均50-60%,硬盘狂闪,追踪了一下MSYQL的语句,发现就是这条语句的问题,大量的SORTING等待。看了一下相关的表,uch_pic的数据量已经达180万条。

问了一下MYSQL高手,答复是:ORDER BY p.dateline DESC 引起全表搜索,如有可能,就去掉。
去掉以后,IO立马下来了,但新问题出现了,幻灯片永远是最早的5张图片。

只好找数据库高手再看一眼,高手直接在数据库中的uch_pic表中加了个dateline的索引,说:“把那条SQL语句恢复回来好了”!

改了回来!问题完美解决!在线人数一路上升,CPU,磁盘IO都相当平稳。
解决方法就是:直接在数据库中的uch_pic表中加了个dateline的索引!
希望这次经历对各位有同样问题的网友是个借鉴。
boobycn 发表于 2009-6-10 17:10:38 | 显示全部楼层
恭喜解决。。
回复

使用道具 举报

necrocuser 发表于 2009-6-15 11:48:22 | 显示全部楼层
俺菜鸟的方法就是直接去掉幻灯片,耶
回复

使用道具 举报

at01 发表于 2009-6-22 21:32:57 | 显示全部楼层
这个要怎么搞啊,我的一打开随便看看就挂了
回复

使用道具 举报

幸福摩天轮 发表于 2009-6-23 14:53:41 | 显示全部楼层
有些用户问添加索引方法:

执行这面SQL:
ALTER TABLE `uchome_pic` ADD INDEX ( `dateline` )
回复

使用道具 举报

ccgo 发表于 2009-6-23 20:43:13 | 显示全部楼层
谢谢了,再问下楼主的版本呢,官方以后的版本应该考虑下这个呢
回复

使用道具 举报

ccgo 发表于 2009-6-23 21:18:07 | 显示全部楼层
谢谢了,再问下楼主的版本呢,官方以后的版本应该考虑下这个呢
回复

使用道具 举报

幸福摩天轮 发表于 2009-6-24 09:28:26 | 显示全部楼层
会的。必须经过压力测试的
回复

使用道具 举报

itsrs2008 发表于 2009-6-24 10:13:12 | 显示全部楼层
没有做任何修改,uch_pic表中就有dateline这个索引,郁闷。
回复

使用道具 举报

microsoul 发表于 2009-6-24 10:41:52 | 显示全部楼层
我也觉得奇怪了,本身就有了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-16 12:34 , Processed in 0.036471 second(s), 5 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表