Sql server 2008 sql日志文件增长过大

Sql server 2008 sql日志文件增长过大,sql-server-2008,Sql Server 2008,我有一个表,有1000万条记录,没有索引,我正在尝试删除该表的重复数据。我用select尝试了插入,其中要么使用左连接,要么不存在;但每次我都会得到违反密钥的错误。另一个问题是日志文件变得太大,事务将无法完成。我尝试将恢复设置为在线推荐的简单,但没有帮助。以下是我使用的查询 insert into temp(profile,feed,photo,dateadded) select distinct profile,feed,photo,dateadded from original as s

我有一个表,有1000万条记录,没有索引,我正在尝试删除该表的重复数据。我用select尝试了插入,其中要么使用左连接,要么不存在;但每次我都会得到违反密钥的错误。另一个问题是日志文件变得太大,事务将无法完成。我尝试将恢复设置为在线推荐的简单,但没有帮助。以下是我使用的查询

insert into temp(profile,feed,photo,dateadded)
select distinct profile,feed,photo,dateadded from original as s
  where not exists(select 1 from temp as t where t.profile=s.profile)
这只会产生违反密钥错误的情况。我尝试使用以下方法:

insert into temp(profile,feed,photo,dateadded)
select distinct profile,feed,photo,dateadded from original as s 
left outer join temp t on t.profile=s.profile where t.profile is null

现在,在这两种情况下,日志文件都会在事务完成之前填满。因此,我的主要问题是关于日志文件,我可以通过查询找出重复数据消除。

您可能需要分批工作。写一个循环,一次遍历5000条(你可以用这个数字进行实验,根据数据库和它的繁忙程度,我不得不减少500条或增加50000条)左右的记录


你的钥匙是什么?您的查询可能需要对添加的数据使用聚合函数进行选择(使用最小或最大函数)。

您可能需要成批工作。写一个循环,一次遍历5000条(你可以用这个数字进行实验,根据数据库和它的繁忙程度,我不得不减少500条或增加50000条)左右的记录


你的钥匙是什么?您的查询可能需要在添加的数据上使用聚合函数进行选择(使用最小或最大函数)。

事务越大,事务日志越大

日志用于对打开的事务进行未提交的恢复,因此,如果您不经常提交并且执行非常大的事务,它将导致日志文件大幅增长。一旦提交,文件将变为可用空间。这是为了在出现故障和需要回滚时保护数据


我的建议是分批运行insert,在每批之后提交

事务越大,事务日志越大

日志用于对打开的事务进行未提交的恢复,因此,如果您不经常提交并且执行非常大的事务,它将导致日志文件大幅增长。一旦提交,文件将变为可用空间。这是为了在出现故障和需要回滚时保护数据


我的建议是分批运行insert,在每个批之后提交

我被告知,无论使用批处理,我都需要在源表上有一个非聚集索引,而我没有,因为它确实包含重复项。或者怎样才能做到呢?谢谢;我尝试了批处理的想法,结果在目标表上违反了唯一键约束。我怎样才能通过这个考试?感谢您的帮助。请描述目标表中的键字段目标表:IX_Temp-profileUrl(ASC)-->唯一键(非群集)源表:IX_PURL-profileUrl(ASC)--->索引(非聚集,非唯一)我被告知,无论使用批处理,我都需要在源表上有一个非聚集索引,因为它不包含重复项。或者如何做到这一点?谢谢;我尝试了批处理的想法,并在目标表上违反了唯一键约束。我如何通过此操作?感谢mill的帮助您的帮助。请描述目标表中的键字段目标表:IX_Temp-profileUrl(ASC)-->唯一键(非群集)源表:IX_PURL-profileUrl(ASC)--->索引(非群集,非唯一谢谢你的回复。你知道我为什么仍然违反唯一密钥错误吗?请看这里:谢谢你的回复。你知道我为什么仍然违反唯一密钥错误吗?请看这里: