【发布时间】: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,因此没有理由必须使用所有可用内存。我目前也在尝试以尽可能慢/低的速度运行它......我不关心运行时间,因为这是一次迁移,我只需要它完成。