环境:
服务器4核4GB内存,运行基于动易SW7的网站及基于OBLOG4的博客,数据库基于MSSQLSERVER2000。网站和博客大部分都做了静态化
现象:
自5月份以来系统,SW7速度突然变慢,前后台页面打开速度以及静态页面生成速度都极慢。静态页面打开速度影响不大
分析:
1 服务器安全
经过仔细检查,服务器没有入侵迹象。也没有发现有效的攻击记录。
2 网络访问量
分析网站日志以及流量统计,未发现访问量的明显变化,因为网站速度慢访问量甚至还有所下降。
3 服务器负载
SQLSERVER进程占用了2GB内存。IIS进程占用约800MB,CPU利用率波动较大。总体上看负载还可以,CPU波动大应该与SQLSERVER有很大关系
4 数据库
首先检查数据量,SW7的信息数据量在15W左右,日志表数据量在2W左右。OBLOG博文信息数据量在4W左右,日志表数据量在1W以下。应该讲这个数据量是很小的,服务器绝对能跑得动。但表现出来的现象应该就是出在数据库,于是清空了两个系统的日志表,同时针对SW7的信息表做了分表,将2008年以前的数据分了出去,这时信息表数据量在10W左右。经过上面操作后,SW7的访问速度仍然非常慢。
结合现象再次分析,认为一定是有某处数据库瓶颈没有找到。再次分析SW7的表使用情况,未发现有更多数据量数据表,问题排查一度无果。后来不经意间在备份数据库时发现OBLOG的备份文件竟然有近2个GB,远远超过了SW7(SW7的备份文件大小在800MB左右),很显然OBLOG数据库里一定有一张超大表。于是用脚本将OBLOG中各表的数据量以及占用空间列出来,脚本如下:
create table #t(name varchar(255), rows bigint, reserved varchar(20), data varchar(20), index_size varchar(20), unused varchar(20))
exec sp_MSforeachtable "insert into #t exec sp_spaceused '?'"
select * from #t
drop table #t
不列不知道一列吓一跳,发现oblog_trackback这张表竟然有近250W条记录,这是何方神圣,立刻GOOGLE。原来这是OBLOG的引用通知记录表,同时在OBLOG的官方网上也有人反映此表数据量超大的问题(不过也就10来W,和我这个比起来还是差远了)影响性能,官方的解答很简单 1 在OBLOG管理后台关掉引用通告 2 清空此表。
于是 truncate table oblog_trackback,然后进后台设置。再看网站速度明显快了很多,看来问题的症结找到了。
体会
1 分析问题还是钻了死胡同,只盯着几张主表看,没有注意其他表
2 这个问题应该早已有之,只不过症状不是很明显,所以也就得过且过了,最后小问题变成大问题
3 OBLOG应该在后台管理引用通告开关调节的地方注明一下,此选项打开可能会影响网站性能。