增加"定时删除数据库S1270一年以上数据"
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
|
||||
/*定期删除数据存储过程*/
|
||||
CREATE PROCEDURE sp_DeleteOldData_Batch
|
||||
@BatchSize INT = 10000, -- 每批删除的行数
|
||||
@DelayMs INT = 100 -- 每批之间的延迟(毫秒)
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
DECLARE @TotalDeleted INT;
|
||||
DECLARE @BatchDeleted INT;
|
||||
DECLARE @CutoffDate DATETIME;
|
||||
DECLARE @StartTime DATETIME;
|
||||
DECLARE @DelayTime VARCHAR(12);
|
||||
|
||||
SET @CutoffDate = DATEADD(YEAR, -1, GETDATE());
|
||||
SET @StartTime = GETDATE();
|
||||
|
||||
PRINT '开始删除一年前的数据,截止时间:' + CONVERT(VARCHAR, @CutoffDate, 120);
|
||||
|
||||
BEGIN TRY
|
||||
-- ============ 删除 BlankingData ============
|
||||
SET @TotalDeleted = 0;
|
||||
SET @BatchDeleted = 1;
|
||||
|
||||
PRINT '开始删除 BlankingData 表数据...';
|
||||
|
||||
WHILE @BatchDeleted > 0
|
||||
BEGIN
|
||||
DELETE TOP (@BatchSize) FROM dbo.BlankingData
|
||||
WHERE OutTime < @CutoffDate;
|
||||
|
||||
SET @BatchDeleted = @@ROWCOUNT;
|
||||
SET @TotalDeleted = @TotalDeleted + @BatchDeleted;
|
||||
|
||||
-- 每批之间短暂延迟,减少锁争用
|
||||
IF @BatchDeleted > 0 AND @DelayMs > 0
|
||||
BEGIN
|
||||
SET @DelayTime = '00:00:00.' + RIGHT('000' + CAST(@DelayMs AS VARCHAR(3)), 3);
|
||||
WAITFOR DELAY @DelayTime;
|
||||
END
|
||||
END
|
||||
|
||||
PRINT 'BlankingData 表删除完成,共删除 ' + CAST(@TotalDeleted AS VARCHAR) + ' 行。';
|
||||
|
||||
|
||||
-- ============ 删除 FeedingData ============
|
||||
SET @TotalDeleted = 0;
|
||||
SET @BatchDeleted = 1;
|
||||
|
||||
PRINT '开始删除 FeedingData 表数据...';
|
||||
|
||||
WHILE @BatchDeleted > 0
|
||||
BEGIN
|
||||
DELETE TOP (@BatchSize) FROM dbo.FeedingData
|
||||
WHERE CreateTime < @CutoffDate;
|
||||
|
||||
SET @BatchDeleted = @@ROWCOUNT;
|
||||
SET @TotalDeleted = @TotalDeleted + @BatchDeleted;
|
||||
|
||||
IF @BatchDeleted > 0 AND @DelayMs > 0
|
||||
BEGIN
|
||||
SET @DelayTime = '00:00:00.' + RIGHT('000' + CAST(@DelayMs AS VARCHAR(3)), 3);
|
||||
WAITFOR DELAY @DelayTime;
|
||||
END
|
||||
END
|
||||
|
||||
PRINT 'FeedingData 表删除完成,共删除 ' + CAST(@TotalDeleted AS VARCHAR) + ' 行。';
|
||||
|
||||
|
||||
-- ============ 删除 tb_alarm ============
|
||||
SET @TotalDeleted = 0;
|
||||
SET @BatchDeleted = 1;
|
||||
|
||||
PRINT '开始删除 tb_alarm 表数据...';
|
||||
|
||||
WHILE @BatchDeleted > 0
|
||||
BEGIN
|
||||
DELETE TOP (@BatchSize) FROM dbo.tb_alarm
|
||||
WHERE EndTime < @CutoffDate;
|
||||
|
||||
SET @BatchDeleted = @@ROWCOUNT;
|
||||
SET @TotalDeleted = @TotalDeleted + @BatchDeleted;
|
||||
|
||||
IF @BatchDeleted > 0 AND @DelayMs > 0
|
||||
BEGIN
|
||||
SET @DelayTime = '00:00:00.' + RIGHT('000' + CAST(@DelayMs AS VARCHAR(3)), 3);
|
||||
WAITFOR DELAY @DelayTime;
|
||||
END
|
||||
END
|
||||
|
||||
PRINT 'tb_alarm 表删除完成,共删除 ' + CAST(@TotalDeleted AS VARCHAR) + ' 行。';
|
||||
|
||||
PRINT '所有表数据删除完成,总耗时:' +
|
||||
CAST(DATEDIFF(SECOND, @StartTime, GETDATE()) AS VARCHAR) + ' 秒。';
|
||||
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
PRINT '数据删除失败:' + ERROR_MESSAGE();
|
||||
THROW;
|
||||
END CATCH
|
||||
END
|
||||
GO
|
||||
Reference in New Issue
Block a user