У нас есть хранимая процедура обслуживания (SQL Server 2005), которая удаляет данные из нашей таблицы журналов.Сохранение хранимой процедуры - как удалить без блокировки репликации
Мы хотим избежать блокировки, так как наша таблица журналов реплицируется на сервер отчетов.
Есть ли что-нибудь, что я могу сделать, чтобы настроить запрос, чтобы предотвратить блокировку? Выполнение DELETE с NOLOCK не будет доступна в будущих версиях SQL Server: http://msdn.microsoft.com/en-us/library/ms187373.aspx
Обратите внимание, что процедура технического обслуживания выполняется еженедельно и потенциально может удалить тысячи строк (или миллионы, если включить ведение подробного журнала).
вы также можете добавить небольшую задержку после удаления каждой партии .. что-то вроде «WAITFOR DELAY» 00: 00: 02 '; »(задержка в 2 секунды) – Sadhir
+1 и, конечно же, само собой разумеется что удаленные файлы должны быть упакованы, или ваш журнал транзакций просто погибнет в одной транзакции, удалив десятки миллионов строк. –
Я пытаюсь что-то подобное, чтобы избежать блокировки вставок ... если я открою две вкладки в SSMS и запустим выше в одна вкладка и вставка в другую, тогда вставка остается заблокированной до тех пор, пока цикл удаления не завершится, даже если я ввешу 10-секундное ожидание между удалениями. Есть что-то, что мне не хватает? (Запуск в базе данных Azure SQL. У меня также есть BEGIN TRANSACTION/ROLLBACK вокруг моего цикла delete, чтобы я мог протестировать, не сдувая все мои тестовые данные). – user1454265