如何追踪ServerXMLHTTP内存泄漏/调用?

时间:2011-11-27 08:52:38

标签: sql-server-2008 windows-server-2003 serverxmlhttp

我们正在使用内部工具监控数据库作业的执行,该工具在作业完成后需要进行URL调用。

对于我们的SQL作业,我们使用自定义函数(找到here)来创建MSXML2.ServerXMLHTTP.3.0对象以发送URL请求。

我们的工作每5分钟运行一次,因此大约每5分钟就会调用一次URL 在SQL Server 2005和Win2k3下,这种解决方案可以在几年内完美运行 在我们最近将作业迁移到SQL Server 2008(也是Win2k3)之后,此URL调用大约工作3天,然后失败。
修复此问题的解决方案是重新启动服务器(重新启动sql server服务不起作用),所以我建议一些内存泄漏。但是,我不知道如何调试此内存泄漏 - 事件日志中没有错误消息或没有日志文件,这是什么。

自定义函数的代码(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

失败。

非常感谢任何线索。

0 个答案:

没有答案