我有一个基本上重建数据透视表的存储过程。它在临时表中构建新数据,然后截断永久表并插入新数据,最后删除临时表。
当我在 Management Studio 中执行存储过程(或直接 T-SQL 代码)时,大约需要一分钟。虽然我知道这不是最有效的流程,但我可以接受。
当我尝试将此任务安排为每 20 分钟左右运行一次时,我的问题就出现了。当我设置一个 SQL Server 代理作业来执行存储过程时,它现在需要将近一个半小时......没错,慢了 90 倍!
我发现了这篇文章:SQL Server Agent Job Running Slow,这似乎是一个类似的问题,但无论我在存储过程的开头还是在 SQL Agent Job 中set nocount on
的命令之前调用它似乎都没有任何影响。exec
我的查询不使用任何游标,尽管我正在cross apply
对表值函数(也不使用任何游标)执行操作。
我显然错过了一些东西,但我什至不知道从哪里开始。我认为通过创建存储过程可以避免这些类型的问题。
作为参考,存储的过程如下所示:
create table #temp
(
ID int,
data1 float,
data2 float
)
insert into #temp(ID, data1, data2)
select t.ID, d.data1, d.data2
from tbl1 t
cross apply dbo.getInterestingData(t.ID, t.param1) d
where d.useMe = 1
truncate table dataPivot
insert into dataPivot(ID, data1, data2)
select ID, data1, data2
from #temp
drop table #temp