Как отследить утечки / вызовы памяти ServerXMLHTTP? - PullRequest
1 голос
/ 27 ноября 2011

Мы отслеживаем выполнение задания базы данных, используя собственный инструмент, который требует URL-вызова после завершения задания.

Для наших заданий SQL мы используем пользовательскую функцию (можно найти здесь ), который создает MSXML2.ServerXMLHTTP.3.0 объект для отправки запроса URL.

Наша работа выполняется каждые 5 минут, поэтому вызов URL выполняется примерно каждые 5 минут.
В SQL Server 2005 иВ Win2k3 это решение отлично работало в течение нескольких лет.
После того, как мы недавно перенесли задания на SQL Server 2008 (также Win2k3), этот URL-вызов работает в течение примерно 3 дней, а затем завершается неудачей.
Решение для устранения проблемы заключается в следующем.перезагрузка сервера (перезапуск службы сервера sql не работает), поэтому я предлагаю утечку памяти.Однако я понятия не имею, как отладить эту утечку памяти - в журнале событий нет сообщений об ошибках или файлов журналов, что бы то ни было.

Код для пользовательской функции (свойство Adam Mechanic-см. выше):

BEGIN   
  DECLARE @Object INT
  DECLARE @Return TINYINT
  DECLARE @Valid BIT
  SET @Valid = 0 --default to false
  --create the XMLHTTP object
  EXEC @Return = sp_oacreate 'MSXML2.ServerXMLHTTP.3.0', @Object OUTPUT 

  IF @Return = 0
  BEGIN 
    DECLARE @Method VARCHAR(350)
    --define setTimeouts method
    --Resolve, Connect, Send, Receive
    SET @Method = 'setTimeouts(45000, 45000, 45000, 45000)'
    --set the timeouts      
    EXEC @Return = sp_oamethod @Object, @Method

    IF @Return = 0
    BEGIN
      --define open method
      SET @Method = 'open("GET", "' + @URL + '", false)'
      --Open the connection
      EXEC @Return = sp_oamethod @Object, @Method
    END         

    IF @Return = 0      
    BEGIN   
      --SEND the request
      EXEC @Return = sp_oamethod @Object, 'send()'
    END     

    IF @Return = 0
    BEGIN           
      DECLARE @Output INT
      EXEC @Return = sp_oamethod @Object, 'status', @Output OUTPUT
      IF @Output = 200
      BEGIN         
        SET @Valid = 1
      END
    END
  END

  --destroy the object
  EXEC sp_oadestroy @Object
  RETURN (@Valid)
END

Я до сих пор отлаживал его, и я знаю, что

--define open method
SET @Method = 'open("GET", "' + @URL + '", false)'              
--Open the connection           
EXEC @Return = sp_oamethod @Object, @Method

не работает.

Любая подсказка очень ценится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...