系统是2003 数据库是2008rc2
有两个数据库比较大,都有50个G,单表有千万的
有时服务器的硬盘读取会直线飙升到100%,系统就会卡死 ,持续一段时间,然后自己回落
现在想找到是什么原因,哪条sql语句造成的
求帮助

解决方案 »

  1.   

    打开活动监视器http://msdn.microsoft.com/zh-cn/library/ms175518.aspx
    看看锁定,看看最近耗费大量资源的查询
      

  2.   

    1、可能是内存不足,到时需要读取硬盘的数据
    2、那个时间段有特殊的操作存在,可能是作业、可能是查询,如果都是每天的某个时间段发生,那可以考虑做个监控,看看发生了什么事。下面是查询耗资源的查询:
    SELECT  s2.dbid ,
             DB_NAME(s2.dbid) AS [数据库名] ,
             --s1.sql_handle ,
             ( SELECT TOP 1
                         SUBSTRING(s2.text, statement_start_offset / 2 + 1,
                                   ( ( CASE WHEN statement_end_offset = -1
                                            THEN ( LEN(CONVERT(NVARCHAR(MAX), s2.text))
                                                   * 2 )
                                            ELSE statement_end_offset
                                       END ) - statement_start_offset ) / 2 + 1)
             ) AS [语句] ,
             execution_count AS [执行次数] ,
             last_execution_time AS [上次开始执行计划的时间] ,
             total_worker_time AS [自编译以来执行所用的 CPU 时间总量(微秒)] ,
             last_worker_time AS [上次执行计划所用的 CPU 时间(微秒)] ,
             min_worker_time AS [单次执行期间曾占用的最小 CPU 时间(微秒)] ,
             max_worker_time AS [单次执行期间曾占用的最大 CPU 时间(微秒)] ,
             total_logical_reads AS [总逻辑读] ,
             last_logical_reads AS [上次逻辑读] ,
             min_logical_reads AS [最少逻辑读] ,
             max_logical_reads AS [最大逻辑读] ,
             total_logical_writes AS [总逻辑写] ,
             last_logical_writes AS [上次逻辑写] ,
             min_logical_writes AS [最小逻辑写] ,
             max_logical_writes AS [最大逻辑写]
     FROM    sys.dm_exec_query_stats AS s1
             CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2
     WHERE   s2.objectid IS NULL
     ORDER BY last_worker_time DESC
      

  3.   


    使用上面的方法查看,另外可以设置PERFORMANCE COUNTER 看看内存/IO/CPU的状况。内存不足也会导致大IO。还有可能是其他进程占用IO也不一定。