Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.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 server 2008 SSIS数据流性能慢于选择进入_Sql Server 2008_Ssis_Dataflowtask - Fatal编程技术网

Sql server 2008 SSIS数据流性能慢于选择进入

Sql server 2008 SSIS数据流性能慢于选择进入,sql-server-2008,ssis,dataflowtask,Sql Server 2008,Ssis,Dataflowtask,所以我有一个剧本: select * into my_archive_05302013 from archive_A where my_Date = '05/18/2013' 以及: 其中,字段n中的n约为100左右。换句话说,我正在加载的表中有100多列 运行速度非常快,查询插入了大约200000条记录。my_date是表存档中的非聚集索引 现在,当我使用SSIS 2008创建数据流时,需要小时才能完成 我的OLE DB源中有以下内容: SELECT * FROM Archive_A WH

所以我有一个剧本:

select * 
into my_archive_05302013
from archive_A
where my_Date = '05/18/2013'
以及:

其中,字段n中的n约为100左右。换句话说,我正在加载的表中有100多列

运行速度非常快,查询插入了大约200000条记录。my_date是表存档中的非聚集索引

现在,当我使用SSIS 2008创建数据流时,需要小时才能完成

我的OLE DB源中有以下内容:

SELECT * FROM Archive_A
WHERE My_Date = (SELECT MAX(My_Date) from Archive_A)
对于OLE DB目标:

数据访问模式:“表或视图-快速加载” 表格名称:archive_B 已选中表锁定和检查约束

有人知道问题出在哪里吗



提前感谢

问题在于,因为您使用的是数据源和数据目标,所以您所做的是将所有数据从数据库中取出,然后将其全部放回数据库,而INSERT语句将其全部包含在数据库中。在INSERT语句中使用Excute SQL任务

问题在于,因为您使用的是数据源和数据目标,所以您所做的是将所有数据从数据库中取出,然后将其全部放回数据库,而INSERT语句将其全部包含在数据库中。在INSERT语句中使用Excute SQL任务

首先,你没有做同样的事情。您的第一个查询将指向存档表中的特定日期,并将其写入另一个表中。然后将3列从更小的表中拉入最终目标。与SSIS方法相比,SSIS方法获取归档表上的每个字段,如果超过这3列,则必须读取比所需多得多的数据。您还必须计算存档表与固定时间点的最大日期。最后,第一个不必考虑网络延迟,第二个可能。嗯,数据流应该击败选择进入?可以使用executesql任务获取MAX(My_date)并将其存储在变量中,然后在数据流的oledb源中使用该变量。(顺便说一句,您的标题应该是“SSIS数据流…”,而不是“SSIS任务流…”),它只是分隔了子查询。另一件事是检查箭头上从源到目标的元数据。是否所有100列都具有正确的数据类型?您还可以添加一个,并在数据经过时查看数据。我以为您在这两种情况下都传输了100多个列,而您只是显示了脚本的一个缩写版本。如果您只需要列的一个子集,那么您肯定需要在SSIS运行并移动千兆字节之前告诉SSIS这一点……是的,我正在展示一个脚本的缩写版本,并且我还尝试使用sql任务将获取最大日期与存储在变量no中分开difference@billinkc网络延迟?有趣的是,这可能是问题所在,因为我的源数据库和目标数据库位于不同的服务器上。首先,您没有做相同的事情。您的第一个查询将指向存档表中的特定日期,并将其写入另一个表中。然后将3列从更小的表中拉入最终目标。与SSIS方法相比,SSIS方法获取归档表上的每个字段,如果超过这3列,则必须读取比所需多得多的数据。您还必须计算存档表与固定时间点的最大日期。最后,第一个不必考虑网络延迟,第二个可能。嗯,数据流应该击败选择进入?可以使用executesql任务获取MAX(My_date)并将其存储在变量中,然后在数据流的oledb源中使用该变量。(顺便说一句,您的标题应该是“SSIS数据流…”,而不是“SSIS任务流…”),它只是分隔了子查询。另一件事是检查箭头上从源到目标的元数据。是否所有100列都具有正确的数据类型?您还可以添加一个,并在数据经过时查看数据。我以为您在这两种情况下都传输了100多个列,而您只是显示了脚本的一个缩写版本。如果您只需要列的一个子集,那么您肯定需要在SSIS运行并移动千兆字节之前告诉SSIS这一点……是的,我正在展示一个脚本的缩写版本,并且我还尝试使用sql任务将获取最大日期与存储在变量no中分开difference@billinkc网络延迟?有趣的是,这可能是一个问题,因为我的源数据库和目标数据库位于不同的服务器上。问题在于包中,他没有限制记录集在SQL中的位置。@DaveXton我使用数据流任务,因为我使用插入的行计数任务进行审核,或者您可以在选择进入后执行选择计数(),为了审计的目的,这应该达到同样的效果。@criticalfix true我可以解决这个问题我只是想了解造成处理时间巨大差异的原因是什么为了获得行数,添加一个变量,将执行SQL任务更改为单行,在结果集中,将变量映射到ROWCOUNT,然后在SQL语句中插入后添加并选择@ROWCOUNT作为ROWCOUNT。工作完成。问题是在包中,他没有限制记录集在SQL中的位置。@DaveXton我使用的是数据流任务,因为我使用插入的行计数任务进行审核,或者您可以在选择进入后执行选择计数(),为了审计的目的,这应该达到同样的效果。@criticalfix true我可以解决这个问题我只是想了解造成处理时间巨大差异的原因是什么为了获得行数,添加一个变量,将执行SQL任务更改为单行,在结果集中,将变量映射到ROWCOUNT,然后在SQL语句中插入后添加S
SELECT * FROM Archive_A
WHERE My_Date = (SELECT MAX(My_Date) from Archive_A)