我有一个数据流,其中包含一个调用存储过程的OLEDB源(通过变量生成的语句(。在 SSMS 中,需要 8 分钟,但包本身需要 3 倍的时间才能完成。我已将验证(延迟验证(设置为 true,因此它仍然在运行时执行此操作。Ive 还在数据流组件以及连接管理器中设置元数据的验证。数据流上也有 ReadUncommit 功能。我不确定还能在哪里看,任何关于如何使它运行得更快的帮助都会很棒。
我怀疑真正的问题出在您的存储过程中,但我也包含了一些基本的 SSIS 项来尝试解决您的问题:
- 确保 OLE DB 源的连接管理器全部设置为延迟验证 ( = True(。
- 确保将 ValidateExternalMetadata 设置为 false
- DefaultBufferMaxRows 和 DefaultBufferSize 对应于表的行大小
- 删除并重新创建目标组件是 SSIS
- 确保存储过程已设置为ANSI_NULLS
- 确保 sproc 中的 SQL 命中索引
-
添加查询提示选项 (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