使用wait type = PAGEIOLATCH_EX暂停删除查询

时间:2017-06-30 10:47:27

标签: sql sql-server sql-delete

我的删除查询已经运行了一整天,现在具有上述状态 - 任何人都可以提出建议吗?

(@P1 int)DELETE FROM ZQV_F_GL2CD 
WHERE M_ID = @P1

如果我的问题含糊不清,请道歉 - 在此之前从未真正遇到这样的问题..

1 个答案:

答案 0 :(得分:0)

PAGEIOLATCH的等待类型表示它正在从磁盘上获取页面。

如果要提取大量数据或页面,则处理可能需要很长时间,但仍可能会删除。

我最近遇到了从表中删除大型Image数据类型的情况。但是,这并不需要一整天,但最多可能需要5分钟才能删除5行。因此,如果有更多的行,那么可能会花费一整天的时间。

tempdb由于使用implict transactions而变得非常大,并且磁盘空间也很低,因此情况更加复杂。

我已经通过使用发现的here这个过程进一步对删除进行了分块来解决了这个问题。

SET NOCOUNT ON;
DECLARE @r INT;
SET @r = 1;
WHILE @r > 0
BEGIN
    BEGIN TRANSACTION;
        DELETE TOP (100000) -- this will change
           dbo.SalesOrderDetailEnlarged
           WHERE ProductID IN (712, 870, 873);

          SET @r = @@ROWCOUNT;

    COMMIT TRANSACTION;
  -- CHECKPOINT;    -- if simple
  -- BACKUP LOG ... -- if full
END