• 大型网站数据库优化和故障跟踪与排查(下篇)


    2、经过数据库的优化后,发现IIS的进程占用的cup非常的高,甚至瞬间上升到80%~90

     

    A、这种情况估计是代码中存在死循环。天哪,网站上有几百甚至上千的文件,如何查找,晕死。

    首先,分析一下死循环产生的情况,利用VBScript写ASP的时候,利用循环语句时,可能发生死循环。举例子,最能说明问题:

     strSQL=”Select name from user where name=’张三’”

     Set RS=Server.CreateObject("ADODB.RecordSet")

    RS.CursorLocation=3

    RS.Open strSQL,objConn,0,1  ’objConn是已经创建好的对象

    i=0

     DO While i<=5 and Not RS.EOF

    i=i+1

    一些操作

    RS.MoveNext

    Loop

    如果RS.MoveNext忘写了,肯定是死了。但这种情况很少发生,要发生这样的错误,将是不可饶恕。

    如果SQL语句有错误,由于某种原因条件变为name=”张三,或者name=张三;本人调试的时候,发现上述的语句是死循环。很纳闷,i<=5应该可以结束循环,但并没有。有兴趣的话,可以试试,至少本人测试是死循环。

     

     

     

     

    解决方案:

    a.       改造循环语句,使其更健壮。测试结果显示,可以结束循环

    i=0

     DO While Not RS.EOF

    i=i+1

    一些操作

    RS.MoveNext

    if i>5 then

                  exit do

    end if

    Loop

    b. 对于RecordSet对象,如果打开没有记录的 Recordset 对象,BOF EOF 属性将设置为 True,而 Recordset 对象的 RecordCount属性设置为零。打开至少包含一条记录的 Recordset 对象时,第一条记录为当前记录,而 BOF EOF 属性为 False。但是,我在使用中发现,如果有一条记录时,上面的说法并不准确。本人发现有的程序员在判断用户是否存在时,利用了NOT RS.EOF ,这样有可能根据错误的逻辑,造成死循环,建议最好使用RecordCount

    其次,如果上述的方法由于代码太多,行不通。这里有一个很具有针对性的方案。

         

    思路:使用服务器上的MS SQL工具“事件探查器”和“任务管理器”。新建一个跟踪,当CUP达到100%时,请马上“暂停所选择的跟踪”或“停止所选择的跟踪”,然后把所有执行的SQL命令抠出来,粘贴到“查询分析器”中查看是否存在语法错误。


    操作图示:

    sql_tcq3.JPG

    根据存在语法错误的SQL语句,定位可能出问题文件。这一点很重要。

    通过上述的数据库优化和对文件中SQL语句的逐一排查,如果还不能解决您的问题。请继续往下看。

     

    3、打开服务器上“管理工具”中的“性能”

     

    操作图示:
    xn_1.JPG

    跟踪查看每个性能对象的参数:参考下面的图示




    xn_2.JPG

    请关注套红部分的参数,如果由于访问量的过大,造成CUP负载过大的话,赶快升级服务器的硬件去吧!


    【写后感】

    本文仅仅是在原有的框架设计基础上进行的优化,一个易用,健壮,安全,并且性能良好的网站,仅上面谈到的还远远不够。请大家把好的框架设计,存储结构及宝贵的经验拿来分享。


    【声明】

     此文仅是本人的一点经验,不当之处请大家指点。望大家共同参与大型网站优化的讨论。

  • 相关阅读:
    编写 Window 服务程序
    WRF文件打开方式
    Springmvc入门案例(1)
    Springmvc入门案例(1)
    Could not open ServletContext resource [/WEB-INF/springmvc-servlet.xml]【解决方案】
    Could not open ServletContext resource [/WEB-INF/springmvc-servlet.xml]【解决方案】
    Springmvc中提交from之后不跳转不进控制器
    Springmvc中提交from之后不跳转不进控制器
    java向数组中插入元素
    java向数组中插入元素
  • 原文地址:https://www.cnblogs.com/engine1984/p/1364536.html
Copyright © 2020-2023  润新知