【发布时间】: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