• 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,特别是在高并发情况下,注意使用绑定变量(减少分析和获取执行计划时间

  • 相关阅读:
    Change MYSQL data directory
    Docker distrubution in django
    mongo&node
    理解Docker单机容器网络
    auto dock
    django_restframework_angularjs
    Javascript异步编程的4种方法
    DockerProblem
    Javascript面向对象编程
    scrapy post请求 multipart/form-data
  • 原文地址:https://www.cnblogs.com/zping/p/1298300.html
Copyright © 2020-2023  润新知