2014-10-01 2 views
0

У меня есть SQL-задание, которое обрабатывает очередь запросов. Он обновляет таблицу1. Это длительный процесс, который занимает 15 минут.SQL Locking - проблема с таймаутом

Между тем мое приложение пытается прочитать записи из таблицы 1 и отображает их в сетке. Соответствующий get proc установил, что уровень изоляции транса не используется. Когда SQL-задание выполняется, мое приложение всегда отключается во время заполнения сетки. Если работа SQL не выполняется, она работает нормально.

У моей proc есть соответствующий уровень изоляции, поэтому я не понимаю, почему это все еще время. Мысли?

Вот как мой прибудете прок выглядит следующим образом:

CREATE PROCEDURE dbo.MyGetProc(...) 

AS НАЧАТЬ SET TRANSACTION ИЗОЛЯЦИЯ LEVEL READ UNCOMMITTED; SET NOCOUNT ON;

SELECT 
    ... 
FROM 
    (
     SELECT 
      ... 
     FROM 
      dbo.Table1 
      LEFT JOIN dbo.OtherTable1 
     WHERE ... 
     GROUP BY 
     ... 
    ) X 
    INNER JOIN dbo.OtherTable2 
    LEFT JOIN dbo.OtherTable3 
    LEFT JOIN dbo.OtherTable4 
    LEFT JOIN dbo.OtherTable5 
    LEFT JOIN dbo.OtherTable6 
    LEFT JOIN dbo.OtherTable6 
ORDER BY 
    ... 

END

+1

Не могли бы вы опубликовать фрагмент кода, который выберет время? Вы получите гораздо более сильные ответы таким образом. –

+0

Я добавил фрагмент кода proc в исходной теме – GreenBinary

ответ

1

использование

Select * из table1 с (NOLOCK)

, который считывает данные поручены.

+0

Я пробовал использовать WITH (NOLOCK) & SET ОПИСАНИЕ УРОВЕНЬ ИЗОЛЯЦИИ READ UNCOMMITTED; как сразу, так и отдельно. Но все тот же вопрос. – GreenBinary

Смежные вопросы