【问题标题】:SSIS Package with Foreach Loop Container Looping Through Object Variable带有 Foreach 循环容器的 SSIS 包通过对象变量循环
【发布时间】:2017-09-21 17:17:54
【问题描述】:

背景: 在 SQL Server (2014) 中,我有一个包含数百个商店编号的唯一列表的表。我有一个 DB2 LUW 服务器,我需要根据这些商店编号从中提取数据并将这些数据转储到不同的 SQL 服务器(2014 年)。由于限制,我必须将商店编号分成 25 个一组并多次运行查询。

为了在 SSIS 中执行此操作,我使用执行 SQL 任务一次提取 25 个商店编号,并将它们填充为单引号对齐、逗号分隔的字符串('12345'、'03884' 等)我存储到一个对象变量中。然后,我使用 Foreach 循环容器将字符串从对象变量中提取出来,并将其存储到字符串变量中。接下来,我有一个包含 DB2 查询的字符串变量,它将商店列表字符串变量作为参数。

"select x, y, z from DB2SERVERTABLE where store_number in " + @[User::Store_List]

接下来,我使用另一个执行 SQL 任务在变量中执行该查询。完整结果集存储在另一个对象变量中。为了从对象变量中获取结果并将它们插入到我的另一个 SQL 服务器中,我使用另一个 FELC 来遍历结果集,使用变量映射屏幕将每个字段存储在一个字符串变量中。在 FELC 中,我有一个最终的执行 SQL 任务,它是一个简单的插入语句,可将变量插入 SQL 服务器。

insert into table values (?,?,?);

所有这一切,不知何故,确实有效。

硬(软件)软件:

  1. VMWare Windows 2012 R2 服务器 64 位
  2. Intel Xeon E5-4650 CPU 4 核 @ 2.69GHz
  3. 32GB RAM(SQL Server 提交 27GB 所以真的只有 5GB...)
  4. Visual Studio 2015
  5. SSDT 2015
  6. DB2 LUW(不确定是什么版本)
  7. SQL Server 2014

问题:最终的 FELC 和插入运行速度非常慢。在我上次的测试中,我从 DB2 中提取了 1 个商店编号的数据(约 95K 行)。 20 分钟后,只有 40K 行被插入到我的 SQL 服务器中,并且在查看“进度”选项卡中的行数时,它变得越来越慢,直到它冻结并且我不得不终止该进程。 Visual Studio 此时平均使用约 3GB RAM 和 50% CPU。 我一直在谷歌上搜索风暴,我找不到与我情况相似的人。我想我最好通过脚本任务在 C# 中做很多这样的工作。我希望在我开始回到代码之前,有人可能会认识到这个问题。谢谢!

【问题讨论】:

    标签: sql-server performance ssis foreach-loop-container


    【解决方案1】:

    对于这一步:

    “完整的结果集存储在另一个对象变量中。为了从对象变量中获取结果并将它们插入到我的另一个 SQL 服务器中,我使用另一个 FELC 来遍历将每个字段存储在字符串变量中的结果集使用变量映射屏幕。在 FELC 中,我有一个最终的执行 SQL 任务,它是一个简单的插入语句,可将变量插入 SQL 服务器。"

    尝试将数据插入到本地 SQL 表中,而不是使用最终的 FELC - 使用查找来过滤数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多