Performance 在大型目标表中,SSIS文件加载速度太慢

Performance 在大型目标表中,SSIS文件加载速度太慢,performance,sql-server-2005,file-upload,ssis,Performance,Sql Server 2005,File Upload,Ssis,这是我的第一个问题,我已经从不同的网站上搜索了很多信息,但是没有一个是有说服力的 问题: 我每天都在加载一个平面文件,其中包含一个在SQLServer2005中的计划作业中执行的SSIS包,但这需要花费太多的时间(大约2个半小时),该文件只有300行,大约50 MB的文件。这让我抓狂,因为这会影响服务器的性能 这是一个场景: -我的包只是一个数据流任务,它有一个平面文件源和一个OLEDB目标,仅此而已!!! -数据访问模式设置为快速加载。 -表中只有3个索引,它们是非聚集的。 -到目前为止,我的

这是我的第一个问题,我已经从不同的网站上搜索了很多信息,但是没有一个是有说服力的

问题: 我每天都在加载一个平面文件,其中包含一个在SQLServer2005中的计划作业中执行的SSIS包,但这需要花费太多的时间(大约2个半小时),该文件只有300行,大约50 MB的文件。这让我抓狂,因为这会影响服务器的性能

这是一个场景: -我的包只是一个数据流任务,它有一个平面文件源和一个OLEDB目标,仅此而已!!! -数据访问模式设置为快速加载。 -表中只有3个索引,它们是非聚集的。 -到目前为止,我的目标表有366964096条记录和32列 -我还没有在任何输出列中设置FastParse。(要先尝试其他内容)

所以我刚开始做一些测试:

-重建/重新组织目标表中的索引(它们太零碎了),但这对我没有多大帮助 -创建了另一个具有相同结构的表,但删除了所有索引,并在SSIS包加载到此新表的情况下执行了作业,只花了1分钟

所以我很困惑,有什么我遗漏了吗??? -SSIS包是否将所有大表写入缓冲区并将其写入磁盘?或者为什么时间上有如此大的差异

-索引是否影响插入时间

-我是否应该将该文件作为临时表加载到此新表中,然后使用已排序的记录对目标表进行大容量插入?”因为我认为数据流任务比批量插入快得多,但现在我不知道


提前问候。

我可能会考虑的一件事是,大表是否有任何触发器导致插入速度变慢。此外,如果聚集索引位于需要在加载期间重新排列数据的字段上,也可能会导致问题


在SSIS包中,使用合并联接(需要排序)可能会导致速度变慢,但根据您的描述,您似乎没有这样做。我只是在你这么做的情况下才提出来,但我没提

如果它在没有索引的情况下运行良好,也许您应该研究一下这些。数据类型是什么?有多少人?也许你可以发布他们的定义


您还可以查看索引的填充因子,尤其是聚集索引。使用高填充因子可能会导致插入上的IO过多。

我用另一个填充因子(80%)重建索引,就像Sam告诉我的那样,时间显著减少。它花了30分钟而不是将近3小时!!! 我将继续测试,以微调数据库。另外,我不必创建聚集索引,我想使用聚集索引,时间会减少很多


感谢所有人,希望这对处于同样情况的人有所帮助。

谢谢HGELM,这张桌子没有任何触发器。我不使用合并联接。这是最奇怪的事情,它只是从一个文件加载数据,很简单,至少我认为它很简单,呵呵。我还缺少其他建议或东西吗?嗨,我在这列中有3个索引:-访问编号(varchar 10,null)-接收日期(datetime,null)-创建日期(datetime,null)-它们是非聚集的,3个都有这个选项(PAD_INDEX=OFF,STATISTICS_norecocomputer=OFF,SORT_IN_TEMPDB=OFF,IGNORE_DUP_KEY=OFF,DROP_EXISTING=OFF,ONLINE=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)在[PRIMARY]上,它们是用默认选项创建的,如我所见(填充系数0=100%)我是否应该使用另一个填充因子(如80%)来重建它们。因为我的表更像是要读取的,而且每天只写入一次。阅读此内容后,我会尝试降低填充因子:实际上,2005年的正确文档是这样的:您也应该有一个聚集索引。我使用80%的填充因子来重建索引nd时间明显减少。它用了30分钟而不是将近3小时!!!表上没有聚集索引?禁用原始数据流,并向控制流添加第二个数据流任务。调用它
速度测试
使用平面文件源并将其连接到行数转换。按生产要求运行包。这是应提供理论上的最大吞吐量。了解从磁盘读取数据的最快速度将有助于确定这是源问题还是目标问题。该服务器上还发生了什么?如果模拟插入相同的操作(300条select语句联合在一起就足够了)从ssms/sqlcmd中,是否需要相当的时间?