论坛首页 综合技术论坛

系统性能优化过程.

浏览 14643 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-01-31  
    现在的公司的系统很不稳定,尤其在高峰期间,一个系统的性能都会影响到其它系统的性能.我负责的一个系统.由于涉及到公司的各个系统,比如生产,工资,库存,工单,他们都是独立的系统.我的系统都要去他们所在的数据库拿数据.尤其是在首页要从各个系统中提取数据,所以等待的时间特别久,用户经常打点话下来抱怨,让我们尽快的想办法解决这个问题.我都能理解,我也想尽快的帮他们解决,我也放心,踏实.
    我观察了各个WEB服务器的性能都不错,服务器都是IBM的刀片服务器,4CPU,4G内存.他们的cpu一般情况都在20%左右,内存用的也不多.但是SQLServer服务器的CPU用的也不高,也在20%左右,sqlServer用的内存在1.9G左右.
    我也尝试打开Window2003SQLServer的3G选项,我希望SQLServer能够用到更多的内存,但觉得这个没有什么作用,不知道您觉得怎样?
    我尝试判断网络的速度的好坏,在局域网内,网速没有问题.
    我尝试优化数据库索引,似乎也没有提升明显的性能.
    我尝试优化SQL,但也没有提升性能.
    我尝试把用Hibernate性能有影响的地方用JDBC来取代,但没有起作用.
    我也监控获取每一部分数据从数据库返回到应用程序所需要的时间,我看到一个地方获取数据花的时间最多,一般情况下要10秒左右,所以系统的性能非常差.我也查看了那个表有400多万条数据,我们把一些很少用到的数据从中移出来,最终留有150万左右的数据,这样做使得那个系统的性能到是提高了不少,但是我的系统提升就不明显.由于这个表十分的庞大,也比较复杂,它是一个交收移交表,比如数据从A部门移到B部门,由从B部门移动到C部门,也就是,由一个上一部门,当前部门,下一部门;就成了一个树状结构了,而且,这个表是系统的核心,众多的操作都涉及它,用户的移交接收操作都和它有关,所以它的负担很重,系统的瓶颈也在这.也不知道对这样的情况大家是怎样设计的.
    我能想到的办法都想到了,请大家给我一些建议,改善我们的系统.让我过一个好年,也提前向大家拜个早年.谢谢!

 

   发表时间:2008-01-31  
做索引了吗?
0 请登录后投票
   发表时间:2008-02-01  
gigix 写道
做索引了吗?

当然做了索引。
我是根据查询条件做的索引,但我不能判断我做的索引是否正确。我用SQLServer事件查探器捕获很多sql语句和存储过程语句,然后用SqlServer中的查询分析器中的索引优化向导得到优化建议,可是没有得到索引优化建议。不知道您是怎么判断的?
0 请登录后投票
   发表时间:2008-02-01  
做cache,将最近使用的记录放到cache表。
控制cache表的大小。
0 请登录后投票
   发表时间:2008-02-01  
首先要分析出, 你的索引有没有被使用, 如果没有被使用就白建了.  还有就是如果这张表经常更新很多, 可以考虑让SqlServer采用Oracle的管理方式---就是select和update是不会被阻塞的.

另外一种是, 可以按条件进行分区-这样你就不用分割表了(SQL server不太清楚, oracle是没有问题的, 不过分区这种东西要看合不合适你的业务).

0 请登录后投票
   发表时间:2008-02-01  
开Profile 跟踪那些延时高,消耗资源高的sql语句,然后查询分析器里执行查看执行计划,哪些语句没有使用到索引,哪些统计需要更新...  
建议
0 请登录后投票
   发表时间:2008-02-01  
hgq0011 写道
它是一个交收移交表,比如数据从A部门移到B部门,由从B部门移动到C部门,也就是,由一个上一部门,当前部门,下一部门;就成了一个树状结构了

照这么看,这个表应该不是树形结构吧,明显就是线型的,数据会同时移动到两个及以上的部门么(会有分叉么)?

你应该把表结构和很慢的SQL贴出来,讨论一下。

一般来说有两点:

1.分析SQL的查询计划,看是否用了合适的索引;

2.改变表的数据结构,或者增加冗余字段,以提升性能。

0 请登录后投票
   发表时间:2008-02-01  
zbird 写道
做cache,将最近使用的记录放到cache表。
控制cache表的大小。

cache不太适合,因为那些更新很快,而且数据也比较重要,如果用了旧的数据就惨了。
0 请登录后投票
   发表时间:2008-02-01  
xiaoyu 写道
首先要分析出, 你的索引有没有被使用, 如果没有被使用就白建了.

是的我也在考虑这个问题,请给我一些建议怎样确索引是否正确的被使用呢?我看到那个表已经建立了好几个索引,似乎建的不太正确。那个不是我负责的,正准备和同事商量能不能改善它,但是那个系统自从我们移走了200多万条记录,系统平稳运行。

xiaoyu 写道
如果这张表经常更新很多, 可以考虑让SqlServer采用Oracle的管理方式---就是select和update是不会被阻塞的.

这个能不能也请您具体说说,好吗? 因为我对ORACLE只懂一点皮毛,还正要更深入的研究它。谢谢!


xiaoyu 写道
可以按条件进行分区-这样你就不用分割表了(SQL server不太清楚, oracle是没有问题的, 不过分区这种东西要看合不合适你的业务).

SQLServer也可以进行分区的,似乎视图(不知道正不正确)。

我要用的那部门数据,我按照业务条件和估算日期建立了一个视图。从150W的记录中只那上百条记录。但是就是这上条数据中一次拿几条数据也要10S左右。这个开销太大了。也让我很头痛呀。现在我都怀疑用视图做这样的事情合不合适?本来我想对视图建一个唯一聚索引,查询倒是可以使用。但是对应的应用系统不能使用,通过系统不能更新数据。
0 请登录后投票
   发表时间:2008-02-01  
yyliuliang 写道
开Profile 跟踪那些延时高,消耗资源高的sql语句,然后查询分析器里执行查看执行计划,哪些语句没有使用到索引,哪些统计需要更新...  
建议

我跟踪到一个SQL要10S左右。
  • 描述: 用索引优化向导看到了图的索引,都是对同一个表的索引。难道就一个索引被使用过?
  • 大小: 714.1 KB
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics