【问题标题】:How to release the memory used to parse XML field in SQL Server如何释放 SQL Server 中用于解析 XML 字段的内存
【发布时间】:2021-03-26 17:36:55
【问题描述】:

我使用存储过程sp_xml_preparedocument打开了很多大型XML,我关闭了SSMS上的选项卡,没有调用sp_xml_removedocument释放内存。

因此,现在当我尝试使用以下代码解析另一个 XML 时:

EXEC sp_xml_preparedocument @idoc OUTPUT, @result

我收到此错误:

无法创建 XML 文档,因为服务器内存不足。使用 sp_xml_removedocument 释放 XML 文档

但是由于我没有存储句柄,我如何释放打开的 XML 所占用的内存?会话已关闭,我无法再获取句柄...

附:我不敢相信,如果您调用sp_xml_preparedocument 并忘记使用sp_xml_removedocument 关闭它,该文件将永远保留在内部缓存中。这是真的吗?

【问题讨论】:

  • @HABO 谢谢!但我发现即使我使用 0 作为参数,它也不会返回任何内容。只有当我在同一个选项卡中执行 sp 时,我才能检索打开的 XML
  • 我必须承认,我对此一无所知...原因可能是,这种方法已经过时了大约 15 年... XML 支持是在 v2000 和基本 XQuery 方法中引入的我认为v2005开始发挥作用。从那时起,推荐的方法是methods provided by the native XML data type。您可以使用计数循环来调用带有 any 号码的 sp_xml_removedocument... 或在可能的情况下重新启动系统。
  • 有趣的事实:我刚刚搜索了 sql server 从服务器内存中删除 xml 文档first entry is from 2005 并返回两个建议:计数循环和服务器重启 :-)
  • @Shnugo 谢谢你的回答,服务器正在生产中,所以我们不能轻易重启它。循环解决方案似乎很实用,尽管我认为句柄在会话中可能不是唯一的。无论如何,我会尝试那个解决方案。谢谢!

标签: sql-server xml tsql xml-parsing


【解决方案1】:

似乎解决此问题的唯一方法是重新启动服务器。错误 重启后消失。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    • 1970-01-01
    • 1970-01-01
    • 2018-05-18
    • 1970-01-01
    相关资源
    最近更新 更多