代码之家  ›  专栏  ›  技术社区  ›  Matt Spinks

是否可以终止此删除查询?

  •  0
  • Matt Spinks  · 技术社区  · 6 年前

    suspended 国家。明确地:

     Start Time               SPID  Database    Executing SQL    Status     command    wait_type        wait_time   wait_resource   last_wait_type
    ---------------------------------------------------------------------------------------------------------------------------------------------------
     2018/08/15 11:28:39.490  115   RingClone   *see below       suspended  DELETE     PAGEIOLATCH_EX   41          5:1:1116111     PAGEIOLATCH_EX
    

    *下面是有问题的sql查询:

    DELETE FROM T_INDEXRAWDATA WHERE INDEXRAWDATAID IN (SELECT INDEXRAWDATAID FROM T_INDEX WHERE OWNERID='1486836020')
    

    读完这篇文章之后;

    https://dba.stackexchange.com/questions/87066/sql-query-in-suspended-state-causing-high-cpu-usage

    KILL 这个问题,正如那篇文章中的答案所暗示的那样。所选答案的一点是,如果您 正在执行的查询。如果这会导致我试图删除的数据出现问题,我并不担心。不过,我更担心的是,这会导致其他数据或表结构本身出现一些问题。

    安全吗 杀戮 这个问题?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Roger Wolf    6 年前

    如果你运行 delete 从你的笔记本电脑通过网络,它失去了与服务器的连接,你可以 kill 或者等它自己消失。取决于 @@version 对于您的SQL Server实例,特别是它的修补程度,后者可能需要重新启动实例。

    但是,如果 T_INDEX.INDEXRAWDATAID 列为空,则可能遇到问题。最好通过 join ,还添加了批处理拆分:

    while 1=1 begin
    
        DELETE top (10000) t
        FROM T_INDEXRAWDATA t
            inner join T_INDEX i on t.INDEXRAWDATAID = i.INDEXRAWDATAID
        WHERE i.OWNERID = '1486836020';
    
        if @@rowcount = 0
            break;
    
        checkpoint;
    end;