【问题标题】:Slow/Poor Performance on SSIS with xml使用 xml 的 SSIS 上的性能慢/性能差
【发布时间】:2015-12-17 10:35:15
【问题描述】:

我是 SSIS 新手,遇到了这个问题:

我有超过 100.000 个 xml 文件,每个文件大约 16kb 大。它们有大约 200 列和一个主键。其中一些仅用于更新。 我必须用数据填充数据库,但每个文件加载/更新大约需要 1.5 秒。我正在使用 VS 2015 和 MS SQL。 我只想在工作时间内创建数据库,现在大约需要 44 小时,这似乎很荒谬。 (之后每天只有大约 10 个 xml 文件需要更新。)

我的 SSIS 控制流看起来像:

我的 SSIS 数据流看起来像:

我不知道如何获得更好的性能。

我尝试过的事情: 设置 Ole DB = 每批 5000 行并使用快速加载

即使我只插入 xml(由于我不更新而导致错误结束),它也需要很多时间(每个文件大约 1 秒)。

任何帮助将不胜感激。

【问题讨论】:

  • 检查查找转换的缓存选项:msdn.microsoft.com/en-us/library/ms141821.aspx 通常,它会缓存一个巨大的表格(永远占用)并且只使用它的一小部分,反之亦然。
  • 我的 Lookup 做了全缓存,改成无缓存,但时间还是一样。
  • 老实说,对非常小的文件进行 100,000 次读取会带来很大的开销。恐怕你被这种情况困住了......执行文件 i/o 很慢。
  • 似乎我必须编写一个程序来过滤最新更新,然后只插入它们......希望会有一个简单的思维错误或魔术;)

标签: xml ssis


【解决方案1】:

我一直在做类似的事情,并且发现管理费用存在同样的问题。我想我会分享我唯一的工作 - 并行处理。

所以首先要计算出您的服务器有多少内核可用。经验法则是每个核心可以有一个进程。

然后您可以为您的机器拥有的每个核心创建一个收件箱文件夹(假设您有四个核心):

  • 收件箱 1
  • 收件箱 2
  • 收件箱 3
  • 收件箱 4

然后进入您的 SSIS,您的控制流中有 foreach 循环并复制此过程四次,但不要连接它们(这样它们单独运行)。

最后进入每个 foreach 循环并编辑每个循环,以便从不同的收件箱中提取。

您显然需要将文件剪切并粘贴到每个收件箱中,但它会运行四个并行执行相同操作的数据流。即您应该在加载一个文件的同时加载四个文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    • 2015-04-09
    相关资源
    最近更新 更多