我有两张大桌子,有6000万张,分别是。 1000万条记录。我希望将两个表连接在一起,但是该过程运行3个小时,然后返回错误消息:
由于' active_transaction'
,数据库的事务日志已满
我正在使用SQL server 2008 r2
。
我使用的SQL
查询是:
Select * into betdaq.[dbo].temp3 from
(Select XXXXX, XXXXX, XXXXX, XXXXX, XXXXX
from XXX.[dbo].temp1 inner join XXX.[dbo].temp2
on temp1.Date = temp2.[Date] and temp1.cloth = temp2.Cloth nd temp1.Time = temp1.Time) a
答案 0 :(得分:1)
单个命令是一个事务,事务直到结束才会提交 所以你要填写交易日志。
您需要一次循环并插入100,000行
从这开始,只是为了测试前100,000个 然后需要添加带游标的循环
create table betdaq.[dbo].temp3 ...
insert into betdaq.[dbo].temp3 (a,b,c,d,e)
Select top 100000 with ties XXXXX, XXXXX, XXXXX, XXXXX, XXXXX
from XXX.[dbo].temp1
join XXX.[dbo].temp2
on temp1.Date = temp2.[Date]
and temp1.Time = temp1.Time
and temp1.cloth = temp2.Cloth
order by temp1.Date, temp1.Time
为什么?这是很多数据。你能使用View还是CTE? 如果这些连接列被编入索引,则View将非常有效。
答案 1 :(得分:0)
即使数据库处于简单恢复模式,事务日志也可能已满,即使select into是最小化记录操作,由于其他transactiosn并行运行,日志也会变满。
在查询运行时,我会使用以下查询来检查事务的tlog空间使用情况
{{1}}
进一步查询以下可用于检查sql文本