Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 联接大型表-由于活动事务,事务日志已满_Sql_Tsql - Fatal编程技术网

Sql 联接大型表-由于活动事务,事务日志已满

Sql 联接大型表-由于活动事务,事务日志已满,sql,tsql,Sql,Tsql,我有两张大桌子,分别有6000万张。1000万张唱片。我想将这两个表连接在一起,但是进程运行了3个小时,然后返回错误消息: 由于“活动\u事务”,数据库的事务日志已满 自动增长是无限的,我已经将DB恢复设置为simple 日志驱动器的大小为50 GB 我使用的是SQLServer2008R2 我使用的SQL查询是: Select * into betdaq.[dbo].temp3 from (Select XXXXX, XXXXX, XXXXX, XXXXX, XXXXX f

我有两张大桌子,分别有6000万张。1000万张唱片。我想将这两个表连接在一起,但是进程运行了3个小时,然后返回错误消息:

由于“活动\u事务”,数据库的事务日志已满

  • 自动增长是无限的,我已经将DB恢复设置为simple
  • 日志驱动器的大小为50 GB
我使用的是
SQLServer2008R2

我使用的
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

即使数据库处于简单恢复模式,事务日志也可能已满,即使“选择到”是一个日志记录最少的操作,由于其他事务同时运行,日志也可能已满

在查询运行时,我将使用下面的查询检查事务对tlog空间的使用情况

select * from sys.dm_db_log_space_usage

select * from sys.dm_tran_database_transactions
select * from sys.dm_tran_active_transactions
select * from sys.dm_tran_current_transaction
下面的查询还可用于检查sql文本


单个命令是一个事务,该事务直到结束才提交。
因此,您正在填写事务日志

您需要一次循环并插入100000行

从这里开始,只需测试前100000个
然后需要添加带有光标的循环

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
为什么?这是大量的数据。您可以使用视图或CTE吗?
如果这些连接列被索引,视图将非常高效

您是否计算过“计数x返回行的大小”?