原表五千万级以上,每天需要删除最近30天内数据(300万-500万)
今天刚试了下,delete到现在已经2个小时了,还没完。。。。
------解决方案--------------------
贴一个个人之前的总结。
- SQL code
大批量DELETE操作单个事物中删除大量数据有几个缺点:1、 DELETE语句被完整的记录到日志,他要求在事务日志中有足够的空间以完成整个事物。2、 再删除操作期间(该操作肯呢过会花费很长时间),从最早打开的事务到当前时间点的所有日志都不会被重写。而且,如果该事务因某种原因被中断,这之前噶生的所有操作都将被回滚,这也会花费一些时间。3、 当同时删除多行时,SQL Server可能会把被删除行上的单一锁提升为排它表锁,以阻止DELETE完成之前对目标表的读写操作。所以把一个大DELETE事务差分成多个小事务来处理,最好是用一个等待,这样可以日志回收,来释放系统资源。虽然这样可能会比一个delete 语句执行时间要长,但是对整个系统影响较小。实例:BEGIN TRY;DECLARE @row_count INT,@wait_for_delay CHAR(8)='00:00:10'WHILE 1 = 1BEGIN; BEGIN TRAN; DELETE TOP(5000) FROM tb WHERE create_Date<'2012-01-01' SET @row_count=@@ROWCOUNT; IF XACT_STATE()= 1 COMMIT; IF @row_count<5000 BEGIN; BREAK; END; ELSE WAITFOR DELAY @wait_for_delay;END;END TRYBEGIN CATCH IF XACT_STATE()= 1 BEGIN ROLLBACK TRAN; END;END CATCH;