Я выполняю следующую хранимую процедуру для удаления большого количества записей. Я понимаю, что оператор DELETE записывает в журнал транзакций, и удаление большого количества строк приведет к росту журнала.
Я рассмотрел другие варианты создания таблиц и вставки записей для сохранения, а затем усечения источника, этот метод не будет работать для меня.
Как сделать хранимую процедуру, описанную ниже, более эффективной, не допуская ненужного увеличения журнала транзакций?
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