我已经将sql server属性中的内存设置更改为低内存。我已经将缓冲区临时路径更改为系统的特定位置。但是为什么包失败并且消息内存不足?。如果我们设置buffer temp和blob temp,数据应该交换到那个临时位置吗?那么如果它失败了,缓冲区temp的用途是什么?
答案 0 :(得分:5)
有点相关What is the default file path location for BufferTempStoragePath in SSIS 2005?特别是,请阅读bimonkey中关于sql代理服务帐户中磁盘上这些位置的可访问性的链接文章。
一般来说,当您的软件包报告内存不足时,这是由于fully blocking transformations和查找任务使用了大量数据。如果您的包大量使用阻塞转换,请尝试将工作卸载到源系统。如果要责备查找,请尝试在查询中更具选择性。不要拉回整个桌子,只需拉动你需要的柱子。如果这不够具有选择性,您可以尝试使用where子句过滤该数据集(我只需要当前年份的数据等)。如果失败,请将查找从完全缓存模式切换到部分缓存或不缓存。对于通过的每一行,没有缓存将导致对源系统的一次性查询。它将没有内存,它在2行前运行完全相同的查询。部分缓存通过将X MB数据保留在内存中来解决这一难题。如果您想了解有关如何减少内存使用量的更多详细信息,请发布您的包的外观截图。另请注意,像BufferTempStoragePath这样的设置是每个数据流,因此如果包中有多个数据流,则需要配置每个数据流。
数据流的体系结构使得数据被读入内存缓冲区,并且这些缓冲区的地址被传递给各种任务。而不是每个任务需要分配给它们的大量内存来保存通过它们的数据,它们都在相同的共享内存集上工作。将内存从任务复制到任务在内存消耗方面会很慢并且非常昂贵。
有序言说,BufferTempStoragePath and BlobTempStoragePath是什么?无论何时将大对象类型(n / varchar(max),xml,image等)拉入数据流,该数据都不保存在内存缓冲区中,如本机类型。而是将其写入磁盘,并指向该地址的指针放入内存缓冲区。当您的数据流任务仍有工作要做但您已经
时,使用BufferTempStoragePath