合并时的数据流

时间:2015-06-08 14:02:33

标签: sql-server ssis sql-server-2012 azure-sql-database sql-server-2014

我们看到来自SSIS服务器的大量数据流量。我们找不到罪魁祸首。有没有办法找出导致所有流量的包裹?有什么建议吗?我们认为可能所有合并都会导致所有流量。我们的SSIS机器从几个生产SQL服务器获取数据,并将其与我们仓库中的数据合并。死意味着

  • a)新数据被转移到SSI机器,
  • b)将现有数据传输到SSIS机器,
  • c)完成合并,然后将所有数据传输到 仓库?

然后你将如何限制从...移动到的所有数据?

1 个答案:

答案 0 :(得分:2)

你的问题a,b和c(如果你在SSIS中使用SSIS转换组件)的答案基本上是“是的,转换所需的所有新数据和现有数据将流入SSIS实例,以及由此产生的合并数据将从SSIS实例流出到目标服务器“。更详细的解释如下。

假设您使用的是SQL Server 2012及更高版本,则可以启用详细日志记录来捕获传输的行数。详细信息记录在[catalog]中。[execution_data_statistics]。如果要查找以字节为单位的大小,则需要根据提取的列计算该值,并根据行数进行转换。 [catalog]。[execution_data_statistics]捕获包名,任务名,数据流路径和源/目标组件名,执行时间和执行路径,非常适合诊断。

SSIS是内存中的管道。如果您有3个单独的服务器,Source,SSIS和Target,则数据/流量将有所不同。例如,如果数据流任务需要转换并使用Merge,Merge Join,Lookup等组件,则可以预期数据从源服务器,SSIS服务器和目标服务器流出。

另一方面,如果您在具有相同源和目标的2个数据库之间运行具有SQL Server目标的简单数据流任务,则SSIS将在目标上发出BULK INSERT语句(= source = SSIS服务器)实例。在这种情况下,网络上的数据流量非常低(至少与BULK INSERT语句无关)。

如果您的软件包包含调用MERGE t-sql语句的“执行SQL任务”组件,则不会导致数据流量进出SSIS服务器。该活动将在执行MERGE语句的SQL Server实例上完成。如果您正在使用链接服务器,那么数据将按照MERGE语句的要求流入/流出链接服务器,就像您在实例上调用语句一样。

我建议限制移入和移出的数据量,在源级别是有选择性的。例如,如果您知道您将在dbo.Customer中使用ColumnA,ColumnB,ColumnC,那么使用

SELECT [ColumnA], [ColumnB], [ColumnC]  FROM [dbo].[Customer] --
Better!

而不是以下可能检索超过这3列的语句:

SELECT * 
FROM [dbo].[Customer]  -- Do Not Use

还有一些优化SSIS的最佳实践,包括减少带宽和优化传输的数据量,您可以遵循。请在此处阅读:http://blogs.msdn.com/b/sqlcat/archive/2013/09/16/top-10-sql-server-integration-services-best-practices.aspx。 如果您正在使用Hybrid平台,您可能还有兴趣阅读“SSIS for Azure和混​​合数据移动”白皮书(https://msdn.microsoft.com/en-us/library/jj901708.aspx)。本白皮书还提供了“SSIS操作和调整指南”的附加链接,该链接也很有用。

此外,您可能还有兴趣了解CodePlex上提供的SSIS报告包,以便在服务器上更加可视化SSIS执行。

希望这会有所帮助。 朱莉