SQL Server对同一存储过程的多次调用会影响性能吗?

时间:2014-11-13 16:47:25

标签: sql sql-server stored-procedures

我有一个类似于下面的SP:

DECLARE my_cursor CURSOR FAST_FORWARD FOR 
SELECT TOP 500 id
FROM Table
WHERE colA= 1 AND colB= colC
--call another SP
--some other select/update operations
-- deallocate the cursor when everything is done

现在,假设我有一个Java程序在循环中调用此SP:

for (int i =0; i < 1000; i++)
     JPA.em().createNativeQuery("exec my_SP").executeUpdate(); //each time gets 500 to process

我意识到处理时间逐渐增加。完成第一个循环只需几秒钟,但很快就会上升到大约一分钟才能完成循环。

我猜这是由于每个循环SP /光标占用一些内存空间而导致内存不足。因此,最终SQL Server需要回收一些内存,随着循环的继续,这会变得更加频繁(因此需要更长的处理时间)。

我有两个问题:

  1. 如果以上是正确的,为什么在某一点之后增加的时间不应该相当稳定?每次我处理一个恒定数量(500)的记录。所以,我认为,就记忆而言,它就像500和500英寸。
  2. 如果上述情况不正确,为什么每个循环的处理时间都会增加?
  3. 光标是主要原因,还是因为我将SP调用分开,比如说这个例子,千片?

0 个答案:

没有答案