Я запускаю следующую хранимую процедуру для удаления большого количества записей. Я понимаю, что оператор DELETE записывает в журнал транзакций и удаляет много строк, что приведет к росту журнала.Как удалить записи в SQL 2005, где хранятся журналы транзакций
Я изучил другие варианты создания таблиц и вставки записей, чтобы сохранить и затем обрезать источник, этот метод не будет работать для меня.
Как я могу сделать мою хранимую процедуру ниже более эффективной, убедившись, что я держу журнал транзакций излишне ненужным?
CREATE PROCEDURE [dbo].[ClearLog]
(
@Age int = 30
)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- DELETE ERRORLOG
WHILE EXISTS (SELECT [LogId] FROM [dbo].[Error_Log] WHERE DATEDIFF(dd, [TimeStamp], GETDATE()) > @Age)
BEGIN
SET ROWCOUNT 10000
DELETE [dbo].[Error_Log] WHERE DATEDIFF(dd, [TimeStamp], GETDATE()) > @Age
WAITFOR DELAY '00:00:01'
SET ROWCOUNT 0
END
END
«Я изучил другие варианты создания таблиц и вставки записей, чтобы сохранить, а затем обрезать источник, этот метод не будет работать для меня». Как так? Ответ на это влияет на возможные решения. –
Будет ли какой-то тайм-аут, если я урезаю исходную таблицу? Разве это не вызовет проблему в приложении, пытающемся записать в таблицу журналов? Это была моя забота. – Picflight
Каков режим восстановления базы данных? (Полный, Bulk_Logged, Simple) –