【问题标题】:SSIS XML XSLT Task runs out of memorySSIS XML XSLT 任务内存不足
【发布时间】:2011-12-19 18:23:35
【问题描述】:

我正在 BIDS 2005 中开发一个包,它以针对非常大的输入文件的 XML (XSLT) 任务开始,并不断收到以下错误

[XML 任务] 错误:发生错误并显示以下错误消息: "抛出了 'System.OutOfMemoryException' 类型的异常。

我的工作站是 Win7 64 位 - 16 GIG Ram - i7 8 核处理器 3.5 gHZ。我在这个过程中运行任务管理器,它在运行过程中只使用了大约 7.5 gigs 的 ram,直到它因错误而崩溃。我正在针对我的本地 SQL 2008 R2 64 位实例运行。该软件包在 BIDS 中配置为在 64 位模式下运行。我已经用谷歌搜索了一段时间,但没有发现任何看起来很有希望的东西 - 有人遇到过这个并解决过吗? - 谢谢。

【问题讨论】:

  • 当你说“非常大”时,你到底是什么意思? 100MB? 100Gb?
  • 请提供源 XML 文档和转换的完整(但尽可能少)示例,以便人们重现问题。在没有这些信息的情况下,这根本不符合“问题”的条件。内存不足的原因有很多,这可能是无休止的递归,也可能是一个巨大的 XML 文档,其解析后的实例无法放入总可用内存中——这正是可以使用代码确定的原因你忘了给我们看。
  • 如果你也能透露一些关于开发包的一般细节也会很有帮助
  • 另外,如果 XML 文档的字符串表示大约或大于 3GB,则其解析的 XmlDocument 很可能不适合 16GB 的 RAM。
  • @Michael Kay - 大约 50 gig

标签: sql-server xml xslt ssis bids


【解决方案1】:

众所周知的事实是,除非 XSLT 处理器实现流式处理(该功能不属于 W3C XSLT 1.0 或 XSLT 2.0 规范的一部分),否则整个解析的 XML 文档通常保存在可用 RAM 中。

对于给定的 XML 文档字符串大小计算必要的可用 RAM 有不同的建议。我知道的一个是:

RAM ~= 5 * string-size

根据这个公式,对于一个字符串大小为 50GB 的 XML 文档,所需的 RAM 约为 250GB,这比可用 RAM (16GB) 高出 15 倍。

您可以尝试使用提供一些流式扩展的 Saxon 9.4。

注意:即使是当前指定的 streaming feature in the W3C XSLT 3.0 WD 也不能保证所有可能的转换都可以在流模式下执行——事实上,在XSLT 转换可以使用哪些 XPath 表达式,以保证此转换在流模式下成功执行。

【讨论】:

    【解决方案2】:

    我实际上找到了解决方案。我使用脚本任务代替 XML 任务来进行转换。它只需要 3 行代码,并且在所有提要(包括大型提要)上都运行良好。该脚本的示例代码如下:

    Imports System
    Imports System.Data
    Imports System.Math
    Imports System.Xml.Xsl
    Imports Microsoft.SqlServer.Dts.Runtime
    
    Public Class ScriptMain
    
    Public Sub Main()
            Dim xslt As New XslTransform()
    
            xslt.Load("C:\VVV XML\your-xml-stylesheet.xsl")
            xslt.Transform("C:\VVV XML\your-source-file.xml", "C:\VVV XML\your-destination-file.xml")
    
            Dts.TaskResult = Dts.Results.Success
    End Sub
    
    End Class
    

    【讨论】:

    • 标准 XSLT 块(可能应该与此代码相同)抛出内存不足异常,这真的很奇怪。这段代码运行流畅。但是,请记住,结果略有不同,可能与不同的格式或类似的东西有关。文件大小略大于使用此代码创建的文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 2019-04-06
    • 2019-10-23
    • 2020-10-13
    相关资源
    最近更新 更多