执行SSIS包时,我遇到了以下错误,
The buffer manager failed a memory allocation call for 10484608 bytes, but was unable to swap out any buffers to relieve memory pressure. 20 buffers were considered and 20 were locked. Either not enough memory is available to the pipeline because not enough are installed, other processes were using it, or too many buffers are locked.
[DTS.Pipeline] Error: Thread "SourceThread0" has exited with error code 0xC0047038.
[DTS.Pipeline] Error: The Data Flow task failed to create a buffer to call PrimeOutput for output "XML Source 1" (91) on component "GeneralCongfigurations" (98). This error usually occurs due to an out-of-memory condition.
尝试使用“脚本组件”从XML文件向SQL表插入数据时会发生这种情况。
如何解决?
答案 0 :(得分:4)
该消息告诉您SSIS正在使用20个缓冲区,每个10Mb - 大约200Mb。 内存不是很大,即使在1Gb机器上也不会耗尽内存。
其他进程很可能会占用内存的其余部分 - 请检查任务管理器。通常是SQL Server占用所有内存 - 如果在同一台机器上运行SQL和SSIS,则限制SQL允许使用的内存量(在SQL Server属性中),为SSIS留下一些内存 - 我建议至少留下0.5GB。
答案 1 :(得分:0)
您还应该查看所有日志消息。特别是,Lookup转换可以记录大量有关它们正在使用的内存的信息。你可以得到一些关于内存分配的非常详细的日志。
答案 2 :(得分:0)
我遇到了同样的问题。我的XML源大约2MB。当我启动它时,它开始抛出这个OutOfMomory警告。我的服务器有大约8GB RAM。所以这不是内存问题。当前的机器SQL服务器服务占用了接近6GB的空间。我可以从任务管理器检查这个。由于我的SSIS包目标连接到差异数据库,我不希望当前的服务器SQL服务正在运行。所以当我停止这个SQL SERVER服务的那一刻,我的SSIS包就成功执行了。
答案 3 :(得分:0)
@Chris Pickford
您要使用PerfMon计数器: 记忆\ 可用字节数/兆字节 犯规 SQLServer:SSIS管道\ 缓冲存储器 使用中的缓冲区 假脱机缓冲区
此外,如果您已登录软件包,请查看事件User:BufferSizeTuning