4

在 SSIS 2005 中,我使用导入/导出向导创建了一个包,该包删除/重新创建和替换我的生产服务器和开发机器之间的某些表上的数据。向导创建的控制流非常复杂,因此我创建了一个新包并使用了“传输 SQL Server 对象任务”,它非常容易配置和设置,而不是向导创建的疯狂的东西。问题是我创建的包需要 3 多分钟才能运行,而向导版本大约需要 20 秒。他们基本上都在做同样的事情,为什么执行时间会有这样的差异?我可以在使用 Transfer Objects 任务的包中更改设置以使其运行得更快吗?

这是向导创建的包。在使用我编辑没有问题的向导之前,我已经创建了类似的包,但我以前从未见过这样的东西。我不知道在哪里修改我删除和创建的表和架构。替代文字 http://www.freeimagehosting.net/uploads/f7323b2ce3.png

这是for循环容器内的传输任务的属性

替代文字 http://www.freeimagehosting.net/uploads/6f0dfc8269.png

4

6 回答 6

1

为什么不使用向导生成的包并弄清楚它的作用呢?它显然是非常有效地做事。

于 2009-11-04T21:49:31.500 回答
1

可能是相当多的事情。你在做查找吗?如果是这样,请改用连接。您还可以运行 db 配置文件以查看该疯狂包与您的自定义包相比有何作用。

于 2009-11-04T22:04:22.687 回答
1

这类性能问题通常源于“提交”级别和日志记录。

图示的向导生成的任务在进入循环之前执行“启动事务”,并在传输所有数据后提交。如果桌子不是“巨大的”,这是最好的做法。

您是否在手动编码版本中保留了“自动提交”?

于 2009-11-06T01:51:32.460 回答
1

我不使用向导,但它是否可以创建一个实际完成工作的存储过程?这将解释它如何变得更快,因为存储过程可以完成数据库中的所有工作。

我很好奇里面是什么TransferTask,因为这似乎是所有工作完成的地方。

您可以查看将数据导出到平面文件,然后使用批量导入更快地完成此操作。

有关事情进展速度的更多想法,请看这里,但最重要的是给出的一些评论,例如他如何错误地使用 Bulk Insert。

http://weblogs.sqlteam.com/mladenp/articles/10631.aspx

更新: 您可能还想看看这个: http: //blogs.lessthandot.com/index.php/DataMgmt/DBAdmin/title-12最后,他显示了他的测试花了多长时间,但第一条评论可能是最有用的部分,可以加快您的导入速度。

于 2009-11-05T01:28:53.193 回答
1

您使用的是什么连接类型?

在这里,当我一直想要在 Oracle 和 SQL 之间进行传输时,ADO.NET 提供程序比 Oracle OLE DB 提供程序慢几英里。

于 2009-10-30T15:07:48.437 回答
0
  • 如果不是特定于区域设置,则对整数和日期列导入使用快速解析选项
  • 将 SQL Server Native Client 10.x OLE DB 提供程序用于内存中的高性能连接,或考虑使用 Attunity 驱动程序或 SQL Server <---> Oracle
  • 将上游数据流组件输出的 IsSorted 属性设置为 True。
  • 选择 OLE DB 目标数据访问模式“表或视图 - 快速加载”
  • 并行运行任务不会添加不需要的优先约束
  • 避免在数据流任务中使用 select *
  • [RunInOptimizedMode]属性)。优化模式通过从数据流中删除未使用的列、输出和组件来提高性能。
  • 取消选中约束框
  • 将网络数据包大小设置为 32k 而不是默认的 4k
  • 删除截断/重新加载表上的索引,如果使用删除,请考虑使用截断 *
  • 如果表格略有变化,请考虑使用合并
  • 考虑使用动态索引重建 SP,就像这里列出的著名的那样:
  • 使用 UAT 对其进行负载测试,并将 SQL Server Profiler 设置为过滤应用程序“ssis-%”
  • 默认缓冲区大小为 10 兆字节,最大缓冲区大小为 100 兆字节。
  • 单独的 MDF/LDF 以及 TempDB 和碎片整理磁盘
  • 使用 DMV 查找数据库中的瓶颈
  • 从 RAID 5 或其他更改为 RAID 10 或 0
于 2013-12-06T00:56:17.687 回答