Sql server SSIS 14-暂存区-合并两个源需要花费大量时间

Sql server SSIS 14-暂存区-合并两个源需要花费大量时间,sql-server,merge,ssis,etl,staging,Sql Server,Merge,Ssis,Etl,Staging,我有两张桌子: 表A:631476行 表B:12 90行 每个表都有字段ID,我想将其用作合并对象中的键。在下图中,可以看到进程在合并对象之前阻塞。我已经测试了合并连接对象,结果是相同的。。。 为了使用SSIS 14执行此操作,我还有哪些其他可能性 谢谢 我在SSI中进行连接或合并时遇到问题。我将编写TSQL版本并执行SQL任务。这样对我来说,它总是运行得更快。如果两个源表位于同一台服务器中,请不要使用这种方式。您只需在SQLServer端编写一个查询 大概是这样的: SELECT *

我有两张桌子:

  • 表A:631476行
  • 表B:12 90行
每个表都有字段ID,我想将其用作合并对象中的键。在下图中,可以看到进程在合并对象之前阻塞。我已经测试了合并连接对象,结果是相同的。。。

为了使用SSIS 14执行此操作,我还有哪些其他可能性


谢谢

我在SSI中进行连接或合并时遇到问题。我将编写TSQL版本并执行SQL任务。这样对我来说,它总是运行得更快。

如果两个源表位于同一台服务器中,请不要使用这种方式。您只需在SQLServer端编写一个查询

大概是这样的:

SELECT * 
FROM [Table A]
INNER JOIN [Table B] ON [Table A].ID  = [Table B].ID 
ORDER BY ... 
正如詹姆斯·塞拉所说:

  • 性能–使用T-SQL,一切都在SQL引擎中处理。使用SSIS,您可以将所有数据转移到SSIS内存空间并在那里进行操作。因此,如果速度是一个问题,通常T-SQL是一种方法,尤其是在处理大量记录时。类似于T-SQL中的JOIN语句的操作将比在SSI中使用查找任务快得多。另一个例子是,对于大型任务,T-SQL中的MERGE语句比SSIS中的SCD任务具有更好的性能
  • 特性/功能–某些特性只能在T-SQL或SSI中完成。您可以在SSIS中分解文本,但在t-SQL中不能。例如,每行字段数不一致的文本文件只能在SSI中完成。因此,某些任务可能会迫使您使用其中一种
  • 当前技能集–您的IT部门人员是否更熟悉SSIS或T-SQL
  • 易于开发/维护–当然,您最熟悉的任何一种都是最容易的,但如果您在这两方面的技能相当均衡,那么SSIS通常更易于使用,因为它是图形化的,但有时您可以使用T-SQL更快地开发。例如,必须连接一组表将需要SSI中的一组任务,而在T-SQL中它是一条语句。因此,创建任务以连接SSIS中的表可能更容易,但构建要比编写T-SQL语句花费更长的时间
  • 复杂性–SSI可能更复杂,因为您可能需要创建许多任务来实现目标,而在T-SQL中,它可能只是一条语句,如上面连接表的示例所示
  • 可扩展性–SSIS具有更好的可扩展性,因为您可以创建一个使用C#的脚本任务,它可以做任何事情,特别是对于与数据库无关的任务。T-SQL是有限的,因为它只用于数据库任务。SSIS也有日志记录,而T-SQL没有
  • 降级/中断更改的可能性–小问题,但T-SQL总是删除每个版本中必须重写的功能
  • 源和目标的类型/体系结构–如果您有多种类型的源,SSI会更好。例如,它可以很好地与Oracle、XML、平面文件等配合使用。SSIS从一开始就被设计为可以与其他源配合使用,其中T-SQL是为SQL Server设计的,访问其他源需要更多的步骤,这样做还存在其他限制
  • 当地法规-是否有一些公司标准必须遵守,以限制您可以使用的工具

  • 是的,排序600K行比排序13K行要花更多的时间。在合并开始之前,两种排序都需要完成。考虑在源中执行排序,这样就不需要SSIS中的排序步骤(这可能需要调整元数据,这样SSIS不会丢失源已经排序的信息);数据库服务器在这方面效率更高。事实上,您的流程看起来非常简单,可以使用SQL完成实际合并之前的所有工作。