在ssis中缓冲区temp和blob temp的实际用途是什么

时间:2012-05-10 15:59:11

标签: ssis

我已经将sql server属性中的内存设置更改为低内存。我已经将缓冲区临时路径更改为系统的特定位置。但是为什么包失败并且消息内存不足?。如果我们设置buffer temp和blob temp,数据应该交换到那个临时位置吗?那么如果它失败了,缓冲区temp的用途是什么?

1 个答案:

答案 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
  • 将您的记忆分散(通过完全/部分阻止转换)引擎无法再获取
  • 试图在一项任务中做太多的事情。我的经验法则是,我应该能够跟踪包中任何转换到所有源和目标的线。如果您已经从导入/导出向导创建了一个包,那么这些数据流是被分割成单独流的主要候选者,因为它喜欢将不相关的东西分组到单个数据流中,这使得他们的内存很耗尽。
  • 该框没有足够的资源来执行数据。我通常宁愿避免在工作中投入更多的硬件,但如果你已经解决了前两个子弹,这将是我手枪中的最后一个。