我正在创建一个SSIS包,使用查找将数据从源系统加载到数据仓库中。 以下是当前设置过程的方式:
不是很复杂。查找表有10到50条记录。我将源数据限制为10,000条记录,以便在合理的时间内完成包。 加载10,000条记录需要20分钟。
消息中的时间线显示:
我在哪里可以看到为什么插入10,000条记录需要花费近19分钟?关于我可以采取哪些不同的做法以使其运行更快的任何建议?
编辑:回答以下问题
数据类型 - 不确定你在问什么?我正在查找的数据类型?整数是ID字段。 Code字段是整数或Char(4)。
主要进程的数据流是:源(运行查询以从阶段表获取信息),查找LocationID,匹配和不匹配到Union,查找伤害CodeID,匹配和不匹配到Union,重复下4个查找表,排序源,合并加入我的目标(当前是一个空表),确定添加,更改或删除记录(这些都是添加)。
目标表是:
CREATE TABLE dbo.tfResidentEvent
(
ResidentEventID INT IDENTITY(1, 1)
PRIMARY KEY ,
SourceSystemID INT ,
EventID INTEGER ,
EventCodeID INT ,
FacilityID INT ,
ResidentID INT ,
DateID INT ,
TimeID INT ,
LocationCodeID INT ,
CauseCodeID INT ,
ConditionCodeID INT ,
InjuryCodeID INT ,
chksum_type1 int,
chksum_type2 int
)
时间来自服务器上显示的用于执行程序包的消息。
SQL Server 2012上的SSIS
我将尝试使用派生列重新执行包,并查看执行所需的时间。
答案 0 :(得分:0)
我从SSIS包中删除了所有LOOKUP函数。在我的源代码中,我使用了LEFT OUTER JOINS的单个查询,以便在适当的字段中获取FK_ID或NULL。我在查询中对源和目标进行了排序,然后使用MERGE JOIN来识别包是否应该添加/更新/删除。
在服务器上部署后,10,000条记录的插入时间从19分钟到17秒不等。我能够在10分钟内加载整个650K记录表。