sql-server-2012 - 何时在 SSIS 的 Lookup 组件中选择缓存

标签 sql-server-2012 ssis

在 SSIS 中查找有 3 种类型的缓存.. 完整部分和无缓存。

在我们的解决方案中,它一直使用默认的(完整)。是否有任何特定的场景,它可以用于部分缓存/无缓存? 在我们的解决方案中,锁定表总是很小(例如:-我们一直在查看小表以获取类型或获取描述)。这可能是它被配置为默认(完整缓存)模式的原因?

请让我知道宝贵的建议和意见。

最佳答案

让我们介绍一下基础知识。

全缓存 - 在数据流实际执行之前,全缓存模式下的所有查找组件将针对其源运行查询并在本地缓存所有数据。一旦数据流开始,这些转换的源系统就可以被删除,因为集成服务拥有那个时间点的所有数据。

部分缓存 - 没有为部分缓存预缓存数据。对于通过转换的每一行,部分缓存将查看其内部缓存以查看查找键是否已经通过。如果有,则将使用本地副本。否则,将针对引用系统触发单例查询以查找值。如果你有一个未优化的查找,那会变得非常昂贵,正在拉回大量数据,非常独特的源 key 。如果在远程系统中找到匹配项,则该数据将缓存在本地,直到包完成或足够多的新查找已生成匹配项并且缓存已满。

无缓存 - 类似于部分缓存,但它将始终对源系统执行查询。即使您的整个导入集只有一个唯一的键值。

为什么我会选择一个而不是另一个

除非有特殊原因,否则我会使用完整缓存。

在数据仓库中,有一种情况称为延迟到达维度。您正在加载应该在引用表中具有值的内容,但您直到现在才知道该值存在!一般的解决方案是在加载期间将该值打入引用表。在完整缓存中,引用该缺失值的每一行都不会找到它,然后尝试插入它,这会导致重复。部分/无缓存将在第一次未命中时解决此问题,这将导致插入到引用表中,随后的查找将找到它并将其添加到缓存中。

我遇到的另一种需要部分/不需要缓存的情况是当我需要范围查询时。我有包含 SurrogateKey|BusinessKey|StartDate|StopDate 的表 我需要查找夹在 StartDate 和 StopDate 之间的 BusinessKey + MyDate。我使用 GUI 将 MyDate 拖到 StartDate,然后在高级编辑器中,我修改现有查询以执行 BETWEEN StartDate 和 StopDate(当然,我不会使用 BETWEEN)

相关

关于sql-server-2012 - 何时在 SSIS 的 Lookup 组件中选择缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21994136/

相关文章:

sql - 主键和代理键有什么区别?

sql-server - 自动恢复SQL Server数据库备份以进行测试

c# - 如何循环遍历目录C#中的所有文本文件

SQL - 如何根据另一个属性限制一个属性的数据输入?

sql - 波斯语全文索引停止列表

sql - 尽管有大量可用内存,但 SSIS 内存不足

ssis - SSIS 如何知道 OnVariableValueChanged 事件中的哪个变量?

sql-server - Foreach ADO枚举器不显示ADO对象源变量

asp.net - 在asp.net中通过文件上传将Excel工作表导入SQL Server

sql - 从一个表插入另一个表并激活触发器