Sql server SSIS包瓶颈插入记录
我正在创建一个SSIS包,它使用查找功能将数据从源系统加载到数据仓库中。 以下是流程当前的设置方式:Sql server SSIS包瓶颈插入记录,sql-server,ssis,Sql Server,Ssis,我正在创建一个SSIS包,它使用查找功能将数据从源系统加载到数据仓库中。 以下是流程当前的设置方式: 将所有相关表加载到临时表(6个查找表和事实表的数据) 对于每个查找表,使用查找组件确定数据仓库维度表中是否已存在记录。如果匹配,则从维度获取ID;如果不匹配,则派生匹配 将维度的ID和从源流经的其他两三条数据加载到事实表中 不太复杂。查找表有10到50条记录。我已将我的源数据限制为10000条记录,以便包在合理的时间内完成。 加载10000条记录需要20分钟 消息中的时间线显示: 11:13:
- 11:13:28-包已启动
- 11:13:36-所有查找都已准备就绪
- 11:32:33-在“目标-事实插入新记录”中插入数据的最终提交已结束
- 11:32:34-套餐结束
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
我将尝试使用派生列重新执行包,并查看执行所需的时间。我从SSIS包中删除了所有查找函数。在我的源代码中,我使用了使用左外部联接的单个查询,以便在适当的字段中获得FK_ID或NULL。我在查询中对源代码和目标代码进行了排序,然后使用了合并JOIN以标识包是否应添加/更新/删除
一旦部署到服务器上,10000条记录的插入时间从19分多钟变为17秒。我能够在10分钟内加载650K条记录的整个表。您的数据类型是什么?您的数据流是什么样的?目标表上是否有触发器?目标表的定义是什么?如果将目标表替换为一个派生列并运行该包,需要多长时间?您是从命令行/SQL代理收集这些运行的计时,还是在Visual Studio/BIDS/SSDT的上下文中执行这些计时?您使用的是什么版本的SSI?您使用什么来查找记录是否为创建/更新/删除?从您的帖子中,这部分似乎是inside有19分钟的窗口,这种类型的操作在SSIS中的速度是出了名的慢。另外,插入什么组件以及它是如何配置的?最后,如果我在“插入”期间查询tfResidentEvent,您是否在插入之前打开索引并在以后重新生成它们?(另一个“已知”的speedbump)在包完成之前,我没有收到任何返回的记录。我使用ODE DB目的地使用Table或View-fast load选项进行插入。目前,表上没有索引,只有PK。