SQL Server 2005 和JBOSS 4 系统运行缓慢--高并发系统探讨(1)

   今天下午,我们搭建了测试服务器,客户的两个管理人员,正在不停的添加数据,突然说页面打开错误,同时添加数据很慢,这时通过监控数据库服务器发现sql语句发现执行正常,但是客户的页面打不开。这时由于JBOSS服务器和数据库服务器都是放在一个服务器上,这时我看看内存和CPU,发现CPU占用100%,一般都在98%以上。这时很奇怪了,sql语句执行都比较快,为何内存占用98%居高不下,而且服务器还是中午重新启动过了。


    这时我们关闭JBOSS服务器,这时cpu的一下下降到了5%左右。

    
     这时继续让业务人员继续录入数据,不过多久,又出现页面打不开的情况,这时没办法,让用户停止添加数据。通过sql监控发现也是执行时间正常,这时通过两个方法来监控数据库。

     1,SQL server 2005 里的Profiler监控正在执行什么语句

     2,同时通过DMVs监控数据库执行了语句次数。

 

    上面两个图是在业务人员停止录入数据后,所有人停止操作业务系统情况下,间隔几分钟的数据库前后执行语句次数。同时通过SQL Server Profiler监控发现数据库还在不停的执行sql语句,但是这时业务人员已经全部停止操作业务系统了。

      为何还是在执行JBOSS 服务器提交过来的SQL语句。

      这时我想起来,在Eclipse中调试程序时,发现设置了一个断点,没执行完,但是在前台还是可以操作的。这时一下子就明白很多了。

   前提

        1,在这里我还特意设定了为快照隔离级别,保证读写不互相堵塞情况下发生的。

        2,Insert表有6万次表中就只有两个索引,一个单列聚集索引(32位字符),另一般索引(32位字符)

        3,客户用户只有2个人同时频繁操作一个模块。

    原因:

      原来是java中的Servlet造成的,由于Servlet是多线程的。一个请求就是一个线程,这时如果用户操作的比较频繁,而且这时涉及到SQL语句比较多(虽然很短),但在SQL Server还是一条一条执行的。一下很多请求过来,JBOSS服务器,堆积了很多请求,都在竞争的象SQL Server提交。这时我们发现其实业务操作人员没操作,但数据库还是在不停的执行由JBOSS提交过来的请求的。

    解决办法:            

        这种情况的确出在设计阶段,就应该检测修改,现在通过优化数据库是无能为力,只能通过改程序(或修改业务逻辑等),这也反映了系统的高并发差

    总结:

         1,一个好的系统的确是设计和写出来的,而不是建立诸如几个索引提高的。

         2,在高并发情况下,数据库执行的时间越短越好。(减少执行时间

         3,能通过一条SQL语句取出的数据,绝不能使用两条以上的SQL语句去取数据. (减少交互次数

         4,特别是在高并发情况下,注意使用绑定变量(减少分析和获取执行计划时间

posted @ 2008-09-24 20:47  zping  阅读(4180)  评论(10编辑  收藏  举报