Сессия блокируется сама - PullRequest
0 голосов
/ 03 октября 2019

Я запускаю процедуру, которая выполняет MERGE. sp_who2 показывает, что сессия блокируется сама. Как это возможно? Мой sp выглядит так:

CREATE PROC [dbo].[sp] as  
BEGIN  
    MERGE dbo.table as target  
    USING (  
        select field1, field2
        from dbo.view
    ) as source (field1, field2)  
    ON target.field1=source.field1 and target.field2=source.field2
    WHEN NOT MATCHED BY SOURCE THEN  
    DELETE  
    WHEN NOT MATCHED BY TARGET THEN  
    INSERT (field1, field2) VALUES (source.field1, source.field2);  
END

dbo.table - огромный огромный стол. Имеет IX_table(field1) и PK_table(field2,field1)

sp_who2 выглядит так

enter image description here

Версия -

Microsoft SQL Server 2017 (RTM-CU16) (KB4508218) - 14.0.3223.3 (X64)
12 июля 2019 17:43:08 Авторское право (C) 2017 Microsoft Corporation Standard Edition (64-разрядная версия) на Windows Server 2016Стандарт 10.0 (сборка 14393:) (гипервизор)

1 Ответ

1 голос
/ 03 октября 2019

Вы можете сначала попытаться избавиться от подзапроса. Если это не сработает, попробуйте добавить OPTION (MAXDOP 1) ниже, чтобы удалить параллелизм из запроса.

MERGE dbo.table as target  
USING dbo.view AS source
ON target.field1=source.field1 and target.field2=source.field2
WHEN NOT MATCHED BY SOURCE THEN  
DELETE  
WHEN NOT MATCHED BY TARGET THEN  
INSERT (field1, field2) VALUES (source.field1, source.field2)
OPTION (MAXDOP 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...