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