我有一个类似于下面的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需要回收一些内存,随着循环的继续,这会变得更加频繁(因此需要更长的处理时间)。
我有两个问题: