Sql SSIS预评估阶段耗时较长

Sql SSIS预评估阶段耗时较长,sql,performance,ssis,Sql,Performance,Ssis,我有一个包含OLEDB源(通过变量生成的语句)的数据流,它调用存储过程。 在SSMS中,需要8分钟,但包本身需要3倍的时间才能完成。 我已经将验证(DelayValidation)设置为true,所以它仍然在运行时进行验证。我还可以在数据流组件和连接管理器中设置元数据的验证。 数据流也已重新提交。 我不知道还有什么地方可以看,任何关于如何加快跑步速度的帮助都会很好 我怀疑真正的问题出在您的存储过程中,但为了解决您的问题,我还包括了一些基本的SSIS项: 确保OLE DB源的连接管理器都设置为D

我有一个包含OLEDB源(通过变量生成的语句)的数据流,它调用存储过程。 在SSMS中,需要8分钟,但包本身需要3倍的时间才能完成。 我已经将验证(DelayValidation)设置为true,所以它仍然在运行时进行验证。我还可以在数据流组件和连接管理器中设置元数据的验证。 数据流也已重新提交。
我不知道还有什么地方可以看,任何关于如何加快跑步速度的帮助都会很好

我怀疑真正的问题出在您的存储过程中,但为了解决您的问题,我还包括了一些基本的SSIS项:

  • 确保OLE DB源的连接管理器都设置为DelayValidation(=True)
  • 确保ValidateExternalMetadata设置为false
  • DefaultBufferMaxRows和DefaultBufferSize对应于表的行大小
  • 删除并重新创建目标组件SSIS
  • 确保存储过程已将ANSI_null设置为ON
  • 确保存储过程中的SQL命中索引
  • 添加查询提示选项(FAST 10000)-此提示意味着它将选择一个优化前10000行的查询–默认SSIS缓冲区大小

  • 查看存储过程SQL Server

慢行方式:

create procedure GetOrderForCustomers(@CustID varchar(20))
as
begin
  select * from orders
  where customerid = @CustID
end
create procedure GetOrderForCustomersWithoutPS(@CustID varchar(20))
as
begin
  declare @LocCustID varchar(20)
  set @LocCustID = @CustID

  select * from orders
  where customerid = @LocCustID
end
快捷方式:

create procedure GetOrderForCustomers(@CustID varchar(20))
as
begin
  select * from orders
  where customerid = @CustID
end
create procedure GetOrderForCustomersWithoutPS(@CustID varchar(20))
as
begin
  declare @LocCustID varchar(20)
  set @LocCustID = @CustID

  select * from orders
  where customerid = @LocCustID
end

您是否可以发布SSIS日志,指出您认为存在性能问题的地方。包未启用日志记录,但在使用dtexecui运行时,该过程在预执行阶段会花费很长时间。我希望从软件包中完全减少或删除这一步骤,因为这就是瓶颈所在。我不知道答案,但在搜索“ssis预执行阶段卡住”时,我找到了许多可以尝试的方法。您是否对数据库运行了探查器以查看它在这段时间内正在做什么?它针对的是什么数据库?我已经启用了日志记录并分析了数据库。由于元数据是通过与另一个数据库的链接完成的,因此在接收元数据的时间上似乎存在差距,因为日志或概要文件中没有出现任何内容,只是存在巨大的时间差距。我希望+50分能激发你的ESP能力。这是SQL服务器20??您是否能够修改存储过程?为什么建议跳过验证?我觉得它很有价值,尽管有时很慢。在编译时不存在表或字段的特定场景之外,您看到过它会导致问题吗?我没有看到过它会导致问题,只是速度很慢。将ValidateExternalMetadata属性设置为False比将DelayValidation属性设置为True提供了对数据流更精确的控制。当ValidateExternalMetadata属性设置为True(默认值)时,它有助于避免包使用事务时出现锁定问题。出于这个原因,您可能希望坚持在任务级别使用DelayValidation,除非您需要在组件级别工作。OPTION(FAST N)是我的解决方案。