加入大型表 - 由于活动事务,事务日志已满

时间:2015-07-08 13:57:04

标签: sql tsql

我有两张大桌子,有6000万张,分别是。 1000万条记录。我希望将两个表连接在一起,但是该过程运行3个小时,然后返回错误消息:

  

由于' active_transaction'

,数据库的事务日志已满
  • 自动增长是无限制的,我已将数据库恢复设置为简单
  • 日志驱动器的大小为50 GB

我正在使用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

2 个答案:

答案 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文本

tesseract-ocr