【问题标题】:SSIS out of memory despite tons of available memory尽管有大量可用内存,SSIS 内存不足
【发布时间】:2019-04-06 04:09:15
【问题描述】:

它以谚语开头:

[Notes - F1 [107]] 错误:发生错误并显示以下错误消息:“System.OutOfMemoryException:内存不足,无法继续执行程序。(SSIS Integration Toolkit for Microsoft Dynamics 365, v10.2.0. 6982 - DtsDebugHost,v13.0.1601.5)"。

但即使在它自己的诊断中,它也显示有足够的​​内存可用(是的,我的系统上有 32GB):

错误:系统报告 47% 的内存负载。有 34270687232 字节的物理内存,其中 18094620672 字节可用。有 4294836224 字节的虚拟内存,其中 981348352 字节可用。分页文件有 34270687232 字节,其中 12832284672 字节空闲。

信息消息报告内存压力:

信息:缓冲区管理器调用 506870912 字节的内存分配失败,但无法换出任何缓冲区以缓解内存压力。考虑了 2 个缓冲区并锁定了 2 个。可能没有足够的内存可供管道使用,因为没有安装足够的内存,其他进程正在使用它,或者有太多的缓冲区被锁定。

在本示例中,我目前将最大行数设置为 500,而缓冲区大小设置为 506,870,912。我尝试了最大缓冲区大小,但立即失败,最小缓冲区大小仍然抛出错误。我摆弄了各种尺寸,但它从来没有接近处理整个数据集。将 DefaultBufferSize 设置得较低时出现的错误是:

[Notes - F1 [107]] 错误:发生错误并显示以下错误消息:“KingswaySoft.IntegrationToolkit.DynamicsCrm.CrmServiceException:CRM 服务调用返回错误:无法分配 536870912 字节的托管内存缓冲区。可用内存量可能很低。(SSIS Integration Toolkit for Microsoft Dynamics 365,v10.2.0.6982 - DtsDebugHost,

我已经寻找有关如何调整它的资源,但找不到任何与拥有 32GB RAM 的 64 位 Window 10 机器(而不是服务器)相关的东西。

关于更多上下文,我正在使用 Kingsway 将笔记从一个 CRM D365 环境迁移到另一个环境。带有附件的注释是导致问题的原因。

属性:

执行

来源

目的地

【问题讨论】:

  • 506 MB 是一个非常大的内存分配,与发出请求的程序无关。我会问自己为什么会出现这么大的请求。内存的限制不仅仅是总可用空间。一方面,内存分配必须是连续的,并且不能保证在任何给定时刻操作系统都会在堆上拥有这么大的可用内存块。 int 索引最多只能达到大约 2 GB。考虑向 Microsoft 提交错误。
  • 另外,重新阅读您的问题,SSIS 崩溃正是因为您请求了如此大的缓冲区大小。也许您不需要那么大的缓冲区?尝试 1 兆字节,看看会发生什么。如果它仍然要求半场演出,请重新启动 SSIS;如果失败,请重新启动操作系统。
  • 另见stackoverflow.com/q/7393027,它解释了实际上可能是 SQL Server 出了问题。
  • 在 Visual Studio 中运行还是从命令行/SQL 服务器启动?数据流本身是什么样的?
  • 我一直在 64 位运行调试器,但由于我是从 VS 运行的,所以我认为它默认为 32 位。我目前正在寻找某种方法来限制内存使用量,使其不会超过该阈值。只有少数文件是 40-50MB,因此没有理由必须使用所有可用内存。我目前也在尝试以尽可能慢/低的速度运行它......我不关心运行时间,因为这是一次迁移,我只需要它完成。

标签: sql ssis crm


【解决方案1】:

我之前也遇到过这个问题,不是物理内存(即 RAM),而是存储数据库的物理磁盘空间。检查存储数据库和事务日志文件的驱动器上的可用硬盘空间 - 可能已满,因此无法分配任何额外的磁盘空间。

在这种情况下,引用“内存”的错误消息有点误导。

更新

我认为这实际上是由于管道缓冲区中的数据过多造成的。您要么需要查看扩展缓冲区的内存分配(即DefaultBufferSize),要么需要查看流经管道的数据。典型的原因可能是很多列具有大量 NVARCHAR() 字符数。使用 MultiCast 复制行只会使问题更加复杂。关于您使用的 3rd 方组件,您的猜测和我一样好,因为我没有使用它们。

【讨论】:

    【解决方案2】:

    对于以后来的人:

    错误显示“CRM 服务调用返回错误:无法分配 536870912 字节的托管内存缓冲区”。我认为是 CRM 服务器存在内存问题。

    无论如何,我们在通过 ActivityMimeAttachment 实体迁移电子邮件附件时看到了此错误。该问题似乎与以太大的批处理大小和/或多线程向目标 CRM 运行插入操作有关。

    我们将批量大小设置为 1 并关闭多线程,问题就消失了。 (我们还在源请求中将批处理大小设置为 1 - 当批处理大小太大且附件太大时,我们会从本地 CRM 中看到“服务不可用”错误。)

    【讨论】:

      猜你喜欢
      • 2015-02-12
      • 2011-11-10
      • 1970-01-01
      • 2022-07-15
      • 2023-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-05
      相关资源
      最近更新 更多