在SQL Server中,我有一个包含1200万行和5.6 GB存储空间的表(dbo.MYTABLE)。
我需要为每条记录更新varchar(150)字段。
我在WHILE循环中执行UPDATE操作,在每次迭代中更新50K行。
每次迭代后,事务日志似乎不免费并且不断增长。 即使在完成所有UPDATE过程之后,也不会返回事务日志空间。
我的问题是,为什么使用事务日志空间永远不会减少甚至UPDATE完成。代码如下:
DECLARE @MAX_COUNT INT;
DECLARE @COUNT INT;
DECLARE @INC INT;
SET @COUNT = 0;
SET @INC = 50000;
SELECT @MAX_COUNT=MAX(ID) FROM dbo.MYTABLE(NOLOCK)
WHILE @COUNT <= @MAX_COUNT
BEGIN
UPDATE dbo.MYTABLE
SET NEW_NAME = REPLACE(NAME,' X','Y'))
WHERE ID > @COUNT AND ID<=( @COUNT + @INC)
SET @COUNT = (@COUNT + @INC)
END
答案 0 :(得分:0)
如果您没有执行事务日志备份,请切换到简单:
USE [master]
GO
ALTER DATABASE [YOUR_DB] SET RECOVERY SIMPLE WITH NO_WAIT
GO