4

我有一个包含调用存储过程的 OLEDB 源(通过变量生成的语句)的数据流。在 SSMS 中,它需要 8 分钟,但包本身需要 3 倍的时间才能完成。我已将验证 (DelayValidation) 设置为 true,因此它仍会在运行时执行此操作。我还在数据流组件以及连接管理器中设置了元数据的验证。数据流也有 ReadUncommitted。我不知道还能去哪里看,关于如何让这个运行更快的任何帮助都会很棒。

4

1 回答 1

14

我怀疑真正的问题出在您的存储过程中,但我也包含了一些基本的 SSIS 项目以尝试解决您的问题:

  • 确保 OLE DB 源的连接管理器都设置为DelayValidation (= True)。
  • 确保 ValidateExternalMetadata 设置为 false
  • DefaultBufferMaxRows 和 DefaultBufferSize 对应表的行大小
  • DROP 并重新创建您的目标组件是 SSIS
  • 确保您的存储过程具有 SET ANSI_NULLS ON
  • 确保存储过程中的 SQL 命中索引
  • 添加查询提示 OPTION (FAST 10000) - 此提示意味着它将选择一个针对前 10,000 行进行优化的查询——默认的 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
于 2013-11-06T19:42:08.017 回答