m*****y 发帖数: 229 | 1 有没有大牛可以帮我解决个while loop memory hike 问题。
我有个while loop, 大概loop 5000次。 每次while loop有个5000个row的table被
scan一次,然后有个很大的table被update一次。其实我还给这个table加了index。但
不知道为什么,大概run一段时间后整个sql server 窗口就关掉了,好像是memory
hike到一定程度了。 我在task manager里观查memory是一点一点加上去的,然后到一
定程度就cush掉,把整个sql server client给关掉了。不太懂sql server这一块是怎
么工作的,每个while loop不释放memory吗?怎么样可以让每个while loop释放memory
呢?望懂得人指点。不胜感激! |
s**********o 发帖数: 14359 | 2 你先说说干嘛LOOP 5000次去UPDATE同一个TABLE,目的是什么
不用LOOP不行吗?比如JOIN就解决的问题 |
m*****y 发帖数: 229 | 3 Sorry I cannot type Chinese on this computer. Thanks for asking. Last night
I was sleepy so it was not clear. Actually I am updating two tables in while
loop.One row update in table 1, and multiple rows update in table 2. if the
update in one table is not successful, then update in both table need to be
rollback. So I have to use loop. If you have any other method for this
situation, then would be very welcome:) |
t******a 发帖数: 697 | |
n******r 发帖数: 44 | 5 Trigger需要的资源也不小。我觉得二楼问的是关键。当然我不知道楼主的具体情况,
但是感觉楼主的思路还是procedural programming的思路,象Java一样一次操作一个记
录。楼主可能应该考虑一下怎么把思路转成set operation。有没有可能一次操作一组
数据。那才能从根本上解决问题。 |
s**********o 发帖数: 14359 | 6 if the update in one table is not successful?为什么会失败呢,是CONNECTION的
问题
还是UPDATE 0 ROW,还是UPDATE的WRONG DATA TYPE?不是有TRY CATCH什么的,我怀疑
是你的TRANSCATION没有CLOSE才会用了一堆MEMORY
night
while
the
be
【在 m*****y 的大作中提到】 : Sorry I cannot type Chinese on this computer. Thanks for asking. Last night : I was sleepy so it was not clear. Actually I am updating two tables in while : loop.One row update in table 1, and multiple rows update in table 2. if the : update in one table is not successful, then update in both table need to be : rollback. So I have to use loop. If you have any other method for this : situation, then would be very welcome:)
|
m*****y 发帖数: 229 | 7 对楼上和楼上楼上的问题,比如the update of child table was successful, but
the server down or accidentally closed during the update of parent table,
then the update in child table has to be rolled back. 所以我必须一次只能
update one record in parent table and corresponding multiple rows in child
table.
所以set operation我应该也用不到这里。
大概google了一下,貌似while loop 不会在每次loop完释放memory,为的是提高效率
。但还是希望路过的行家解答。 |
s**********o 发帖数: 14359 | 8 你这个LOOP就跟CURSOR差不多,效率非常低,为什么不能把要UPDADE数值弄成一个
TABLE,
BEGIN TRAN
UPDATE PARENT
INNER JOIN PREPARED TABLE
UPDATE CHILD
INNER JOIN PREPARED TABLE
COMMIT TRAN
【在 m*****y 的大作中提到】 : 对楼上和楼上楼上的问题,比如the update of child table was successful, but : the server down or accidentally closed during the update of parent table, : then the update in child table has to be rolled back. 所以我必须一次只能 : update one record in parent table and corresponding multiple rows in child : table. : 所以set operation我应该也用不到这里。 : 大概google了一下,貌似while loop 不会在每次loop完释放memory,为的是提高效率 : 。但还是希望路过的行家解答。
|