2016-08-03 3 views
1

Спасибо, что нашли время, чтобы прочитать мой вопрос. Мы создали систему с использованием T-SQL, которая обрабатывает (большое) количество данных. Когда мы начинаем обрабатывать эти данные, эта операция обычно занимает около 15 минут. В течение этого времени, по некоторым причинам, кажется, что есть блокировка для всех объектов в базе данных. В некоторой степени я понимаю, что я не могу запросить таблицы, в которые записываются. Но также SQL Server дает мне сообщение блокировки тайм-аута, когда я обновляю список таблиц, например (используя F5 в узле Tables в проводнике объектов).SQL Server Large Transaction блокирует все таблицы

Мой код работает на основе следующего шаблона:

CREATE PROCEDURE Sample 

as 

SET NOCOUNT, XACT_ABORT ON 

BEGIN TRY 

BEGIN TRANSACTION 

... 

COMMIT TRANSACTION 

END TRY 

BEGIN CATCH 
    BEGIN 
     PRINT 'STORED PROCEDURE - Returned errors while processing' 
     ROLLBACK TRANSACTION 
    END 
END CATCH 

Теперь, когда я начинаю это я могу выполнить SELECT, с (NOLOCK) запросы на любом столе. Но я не могу просматривать определения в представлениях, хранимых процедурах или в основном выполнять любые другие операции в базе данных.

Я уже установил уровень изоляции READ UNCOMMITTED, но это, похоже, не имеет значения.

Цените любую помощь по этому вопросу.

С наилучшими пожеланиями,

+0

уровни изоляции влияют на выбор утверждения работы, те, которые не будут влиять на DDL, DML..Locking, большие блокирования темы, поэтому поищите о том, как разрешить запирающие блокировок и начните оттуда – TheGameiswar

ответ

0

код, который находится в вашем TRY CATCH блок выполняет большое количество обновлений данных. Изменение уровня изоляции не решит проблему с блокировкой.

Что лучше для вас, чтобы сделать эти основные проверки/изменения:

  • Попробуйте разделить обновление/вставить на более мелкие партии; вещи будут двигаться более плавно, уменьшая блокировку.
  • Проверьте индексирование таблиц, участвующих в запросе обновления (-ях), чтобы вернуть данные быстрее.
0

Этот выпуск не имеет ничего общего с уровнем изоляции, это вопрос об эксклюзиве.

Это блокировка Escalation до уровня базы данных.

Избегайте Эскалация делать меньшие партии СДЕЛОК ...