Каковы последствия не освобождения памяти из SQL-курсора на SQL Server 2000? - PullRequest
0 голосов
/ 18 июля 2011

Я был бы очень признателен всем, кто мог бы указать мне на некоторые ресурсы или поделиться личным опытом по этому вопросу.

Я заметил, что мой процессор sql 2k box был привязан почти на 100%, он резко увеличился почти в то же время, когда процесс etl, который использовал курсор sql, но не освободил память, завершился неудачей.Я остановил и запустил службу, и она устранила проблему.

Этот процесс etl завершился неудачей ранним утром, и когда сервер заработал, разработчик перезапустил процесс вручную.

Итак, в заключение:Мой вопрос заключается в следующем: кажется очень очевидным, что процесс etl, возможно, вызвал всплеск сервера, однако я хотел бы знать, может ли / как / почему эта процедура, которая не освобождает память, вызвать эту проблему.Запрос выглядел примерно так:

USE AdventureWorks
GO
DECLARE @ProductID INT
DECLARE @getProductID CURSOR
SET @getProductID = CURSOR FOR
SELECT ProductID
FROM Production.Product
OPEN @getProductID
FETCH NEXT
FROM @getProductID INTO @ProductID
WHILE @@FETCH_STATUS = 0
BEGIN
Insert into sometable values(@ProductID)
FETCH NEXT
FROM @getProductID INTO @ProductID
END
CLOSE @getProductID
GO

Большое спасибо.

1 Ответ

0 голосов
/ 18 июля 2011

Хлоп. У вас есть вложенный курсор, который может создать очень большое количество выделенных ресурсов. Не скажу, что это определенно ваша проблема, но это определенно проблема.

...