【问题标题】:Data flow task fails because TempDB is full数据流任务失败,因为 TempDB 已满
【发布时间】:2020-08-13 08:44:25
【问题描述】:

我的 OLE DB 源查询如下所示:

select a,b,sum(c)
from(select a,b,c from t1 union all 
     select a,b,c from t2 union all 
     select a,b,c from t3) a
inner join t2 on ...
group by a,b

它给了我以下错误:

SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码:0x80040E14。 OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 11.0”Hresult:0x80040E14 描述:“警告:空值被聚合或其他 SET 操作消除。”。 OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 11.0” Hresult:0x80040E14 描述:“由于文件组 'DEFAULT' 中的磁盘空间不足,无法为数据库 'TEMPDB' 分配新页面。通过删除文件组中的对象创建必要的空间,添加附加文件到文件组,或为文件组中的现有文件设置自动增长。"。

源表并没有那么大,它们之间有大约 3M 行。知道如何处理 tempdb 错误吗?

【问题讨论】:

  • 你真的想要union吗?这会增加删除重复项的开销。一般推荐union all
  • 是的,确实是 union all,我的错
  • 确保 1) 磁盘上有足够的空间 2) tempdb 的大小不受限制或有足够的空间用于查询(数据库属性 -> 文件)

标签: sql sql-server database ssis


【解决方案1】:

预聚合表格可能有帮助:

select a, b, sum(c)
from ((select a, b, sum(c) as c
       from t1
       group by a, b
      ) union all 
      (select a, b, sum(c) as c
       from t2
       group by a, b
      ) union all 
      (select a, b, sum(c)
       from t3
       group by a, b
      )
     ) t inner join
     t2
     on ...
group by a, b;

【讨论】:

    猜你喜欢
    • 2017-11-20
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多