空空

导航

[导入]CommunityServer系统性能优化

发现CommunityServer(以下简称CS)系统在数据量多和访问量大的情况下对资源的占用还是比较厉害,尤其是Sqlserver,于是尝试进行对其进行优化,以下是对其优化的一个过程和参考方案,算是抛砖引玉:

针对SQLServer资源占用较高的情况,开始具体分析到底是哪些存储过程比较占用资源,在服务器上启动SQLServer的Profiler工具,对所有执行的存储过程、SQL进行记录,在记录了两个小时的日志后,下载到本地进行分析,分析结果发现,对于最新图片、分页读取帖子、最新Blog这类的存储过程执行较为频繁,且执行时间较长,尤其是其中的“最新图片”的存储过程,因为join了若干table,所以执行时间特别长,如果重启SQLServer后执行甚至有时超过20秒,所以在第一次打开首页时特别慢,当缓存更新后也是特别慢。

因为这部分内容都更新相对比较频繁,所以即使Cache也效果不是很理想。以其中论坛部分为例,首先要从cs_Threads表的几十万条记录中找到符合条件的ThreadID,再从中取出第一页所需要的最新N(假设为20)个ThreadID,然后根据这20个ThreadID从cs_Threads和cs_Posts表进行Join取得最新20篇新帖子,对于第一步:“从cs_Threads表的几十万条记录中找到符合条件的ThreadID”这个的SQL进行优化的难度比较大,而且效果也不是很明显。

对Logo再次分析,发现对于大多数用户来说,一般关注的是最新的帖子,所以大部分对于分页读取帖子的请求多数集中在第一页,就如我们进入一个板块,往往只看第一页的帖子,同样的也包括“最新图片”、“最新Blog”和“最新帖子”。于是有了个初步的想法,对cs_Threads表中,每个SectionID对应的Thread记录都用一个专门的表例如cs_CachedThreads,Cache上M条(M>=N),这个表中每个SectionID对应的Thread只保留最新的M条,并且和cs_Threads表保持同步,这样,cs_CachedThreads表记录一般保持在几千条以内。当需要读取最新的第一页数据时,就从cs_CachedThreads表读取,相对于从几十万记录的cs_Threads表读取来说,执行时间要少很多。

在这样优化一次以后,网站首页和各版面首页的执行效率还是提高不少,SQLServer的性能也有所提高。


文章来源:http://blog.joycode.com/dotey/archive/2005/10/31/66070.aspx

posted on 2008-01-04 21:01  阿斌  阅读(139)  评论(0)    收藏  举报