例如以下SQL语句SQLServer会如何处理?WHILE 1=1
BEGINSELECT '死循环...'END
-------------------------------------------
1.SQLServer会自动停止这样的死循环?2.需要手动停止这样的死循环,那又应该怎么去停止?
有没有不需要停止SQLServer通过SQL语句的解决方法?sqlserver死循环sql死循环sqlerver死循环

解决方案 »

  1.   

    如果不小心被注入了死循环呢,貌似mysql里面有个能查询死循环线程然后kill就行了的,不知道sqlserver的处理方法是怎么样的。
      

  2.   

    SQLServer可以查占资源比较多的spid,然后用sp_who spid来看看是什么语句,然后kill 掉
      

  3.   

    select * from sys.sysprocesses
    kill spid
      

  4.   

    1.SQLServer会自动停止这样的死循环?
      不会,除非运行到了硬件极限。后果,你知道的哈...2.需要手动停止这样的死循环,那又应该怎么去停止?
       kill @spid
       或 ssms中取消查询
    死循环,貌似在别的程序里面,也没有回收的办法,只能强行stop了。
      

  5.   

    mysql这么强,还能自动发现是死循环。
      

  6.   

    查找最耗时查询-- List expensive queries  
    DECLARE @MinExecutions int;  
    SET @MinExecutions = 5  
       
    SELECT EQS.total_worker_time AS TotalWorkerTime  
          ,EQS.total_logical_reads + EQS.total_logical_writes AS TotalLogicalIO  
          ,EQS.execution_count As ExeCnt  
          ,EQS.last_execution_time AS LastUsage  
          ,EQS.total_worker_time / EQS.execution_count as AvgCPUTimeMiS  
          ,(EQS.total_logical_reads + EQS.total_logical_writes) / EQS.execution_count   
           AS AvgLogicalIO  
          ,DB.name AS DatabaseName  
          ,SUBSTRING(EST.text  
                    ,1 + EQS.statement_start_offset / 2  
                    ,(CASE WHEN EQS.statement_end_offset = -1   
                           THEN LEN(convert(nvarchar(max), EST.text)) * 2   
                           ELSE EQS.statement_end_offset END  
                     - EQS.statement_start_offset) / 2  
                    ) AS SqlStatement  
          -- Optional with Query plan; remove comment to show, but then the query takes !!much longer time!!  
          --,EQP.[query_plan] AS [QueryPlan]  
    FROM sys.dm_exec_query_stats AS EQS  
         CROSS APPLY sys.dm_exec_sql_text(EQS.sql_handle) AS EST  
         CROSS APPLY sys.dm_exec_query_plan(EQS.plan_handle) AS EQP  
         LEFT JOIN sys.databases AS DB  
             ON EST.dbid = DB.database_id       
    WHERE EQS.execution_count > @MinExecutions  
          AND EQS.last_execution_time > DATEDIFF(MONTH, -1, GETDATE())  
    ORDER BY AvgLogicalIo DESC 
            ,AvgCPUTimeMiS DESC
      

  7.   

    这个功能mysql应该没有,我指的是select * from sys.sysprocesses这个方法
    我以为这个是在mysql上的...