【问题标题】:SSIS package runs slow on server but fine on dev machineSSIS 包在服务器上运行缓慢,但在开发机器上运行良好
【发布时间】:2017-02-03 18:04:40
【问题描述】:

我有一个 SSIS 包,可以将数据从 SQL 服务器移动到 Postgres 9.5 数据库。我正在使用最新的 Postgres ODBC 驱动程序连接到 postgres 服务器。大部分操作是插入、更新和更新插入。当我在 Visual Studio 2012 中从我的开发机器(Win 10 64 位)运行这个包时,速度非常快。它可以在大约 40 秒内传输大约 80k 行。

当我将它部署到服务器(一个 SQL Server 2012 实例)并使用 SQL 管理工作室运行它时,它的执行速度非常缓慢。传输少于 10 行大约需要 20 秒,并且需要很长时间才能处理完整的数据集。我从不让 if 完成,因为它需要太长时间。

我的开发机器和服务器都安装了完全相同的 postgres 驱动程序并配置了相同的 ODBC 源。

编辑:我还应该注意,我有其他包部署到该服务器上运行得很好,尽管这些包不涉及 postgres 或使用 ODBC 做任何事情。

【问题讨论】:

  • 您在本地和服务器上使用相同的数据库吗?如果没有,可能是服务器很忙,或者服务器上的表很大,但你的开发表很小。
  • 您在本地和服务器上使用的 postgres 中的表是否相同?您能否提供运行缓慢的数据流的图像?
  • 检查 ODBC 和/或驱动程序跟踪/日志记录。
  • FLICKER & Mark,它在开发和测试服务器上都是相同的数据库和表。 TallTed 你能详细说明一下吗?我在哪里可以找到这些,我应该寻找什么?
  • 首先查看 ODBC 管理器 a/k/a 数据源控制面板的跟踪选项卡。确保已禁用此功能。还要查看您的 DSN 设置,并确保那里没有启用跟踪/日志记录。

标签: sql-server postgresql ssis odbc sql-agent-job


【解决方案1】:

如果其他条件相同:

  • 相同的驱动程序
  • 相同的配置 - ODBC(即 ssl,勾选相同的框),包参数
  • 相同的表 - 包含相同数量的数据和索引
  • 相同位数 (64x)

我会关注资源差异。 IE。

  • 是 IO 一样的。假设这是写入同一个数据库(和文件),那么这应该不是问题。
  • 内存 - 内存是否受限于开发实例?如果数据流有很大的缓冲区,这可能真的会减慢速度。
  • CPU - 开发服务器是否比您的开发机器更受限制
  • Network - 是位于具有不同 QoS 的不同子网中的开发服务器。我猜这不是问题,因为其他软件包不受影响。除非在连接到 Postgres 时有什么奇怪的地方。

另一种解决问题的方法是运行不同版本的包,剥离部分数据流。即删除 odbc / ado.net 目标并运行包。如果它很快完成,你就知道问题就在那里。如果它仍然很慢,请继续向上游移动,直到您确定慢的组件。

最后,我会考虑使用 psql 而不是 odbc。 psql 是一个 postgres 实用程序,类似于 SQL 的 bcp,它允许您将数据批量复制到 postgres。 odbc 驱动程序将只允许逐行插入,这往往是缓慢的。将数据写入制表符分隔文件,然后使用 psql 将数据批量复制到 postgres 中实际上要快得多(80k 行可能需要 5 秒)。

【讨论】:

    猜你喜欢
    • 2021-07-05
    • 2013-06-08
    • 1970-01-01
    • 2020-02-25
    • 1970-01-01
    • 1970-01-01
    • 2017-06-16
    • 2020-08-21
    • 1970-01-01
    相关资源
    最近更新 更多