微软BI 之SSIS 系列 - 再谈Lookup 缓存
开篇介绍
Full Cache 完全缓存





主要特点
- 数据流启动之前(甚至更早,在包执行之前)完成数据查询与缓存动作,查询结果集缓存起来。
- 消耗内存大,增加了数据流启动的时间。
- 在数据流执行的时候非常快,源数据直接和缓存数据做比较,不用再次查询数据库。
- 缓存数据源中的数据变更将也不再影响到缓存中的数据。
- 如果缓存的数据容量超过了内存的大小,那么会出现内存不足报错 Out Of Memory,因为缓存不会主动把数据写入到磁盘上。
何时使用完全缓存 Full Cache
- 引用数据集中的数据量无论大小,只要不超过内存大小,特别当数据源的数据和引用数据集匹配程度高的时候,一次缓存可以反复使用。
- 数据库服务器不在本地,或者数据库服务器压力很大,为了减少反复的连接反复的查询对数据库服务器造成更大的压力。
使用完全缓存 Full Cache 中的关键点
- 数据全部缓存在内存中,如果内存不够并不会将超出部分的数据缓存到磁盘上,而是直接报错 - Run out of memory。
- 由于数据集缓存在内存中,所以在使用 Lookup 的时候不应该直接使用表对象,而应该通过写 SELECT 语句来减少不必要的列输出并且可以加上 WHERE 条件来限定一下数据集的大小,简而言之缓存的数据应该只包含有用的数据。
- 数据一旦缓存,那么在数据流执行过程中就不会再去检测之前源数据是否发生改变或者更新等等,除非数据流重新启动执行。
Partial Cache 部分缓存


特点
- 数据流启动之前,缓存为空,数据流启动时间要比完全缓存的情况下要快。
- Lookup 的时候会慢,因为总要检查缓存,如果有的话就直接用,如果没有的话就需要查询数据库,每次查询都是一次开销。如果数据量比较大的话,这种频繁的查询对数据库服务器压力会比较大。所以从 FF_SRC_INTERNET_SALES 到 LKP_SALES_ORDER_NUMBER 数据流的传递明显要慢,传递一批等一会,因为此时 LKP_SALES_ORDER_NUMBER 需要到数据库中去查数据。即时当 FF_SRC_INTERNET_SALES 数据抽取完毕之后,下面的三个控件还要执行半天。
- 可以在 Advanced Options 中设置最大缓存(32位模式和64位模式两种选择),一旦缓存中的实际数据大小超过这个最大值的话,就会自动清理那些对比中较少使用的行以便为新的数据腾出空间。
- 可以在 Advanced Options 中设置不匹配缓存区所占缓存区的比例,这样在一条源数据在匹配缓存中查询不到,在数据库中也查询不到的情形下,这条数据的关键比较列就会存入不匹配缓存区。下次来的数据如果还在匹配缓存区中找不到的时候,就会先看看不匹配缓存区中是否存在,这样就会减少对数据库的反复查询的几率。如果数据源中的数据与 Lookup 引用集中的数据匹配率很低,可以适当的提高不匹配缓存区的比例。
- 当某次查询数据库时发生 Lookup 引用数据表中的数据发生了变化,此时不匹配缓存区将会默认禁用。应该当 Lookup 引用数据表数据相对稳定没有再发生变化的时候,不匹配缓存区将会重新分配。

什么时候使用 Partial Cache 部分缓存
- 数据源中的数据比较少的时候,这样查询的次数就小。
- 引用数据集中的数据很大,内存无法支持的时候。
- 引用数据集源表的数据发生变化,需要在查询匹配过程中也能知晓的情况下。
- 当需要使用参数化查询来限制引用集的大小的时候可以考虑使用 Partial Cache。
使用 Partial Cache 部分缓存要注意的地方
- 注意缓存区的大小分配尽量足够大,上图中 25MB 实在大小。
- 合理的使用不匹配缓存区,不匹配程度高的时候提高不匹配缓存区的占比。
No Cache 不缓存

无缓存模式下,每次匹配查询都会去数据库查一次。这种缓存模式下,数据量不大并且内存比较紧张的情况下才会使用,当然它对内存的消耗也相对最小,但效率也最低。
总结
跟这篇文章相关的文章还有
- 微软BI 之SSIS 系列 - Lookup 组件的使用与它的几种缓存模式 - Full Cache, Partial Cache, NO Cache
- 微软BI 之SSIS 系列 - Lookup 中的字符串比较大小写处理 Case Sensitive or Insensitive
更多 BI 文章请参看 BI 系列随笔列表 (SSIS, SSRS, SSAS, MDX, SQL Server) 如果觉得这篇文章看了对您有帮助,请帮助推荐,以方便他人在 BIWORK 博客推荐栏中快速看到这些文章。
微软BI 之SSIS 系列 - 再谈Lookup 缓存的更多相关文章
- 微软BI 之SSIS 系列 - Lookup 中的字符串比较大小写处理 Case Sensitive or Insensitive
开篇介绍 前几天碰到这样的一个问题,在 Lookup 中如何设置大小写不敏感比较,即如何在 Lookup 中的字符串比较时不区分大小写? 实际上就这个问题已经有很多人提给微软了,但是得到的结果就是 C ...
- 微软BI 之SSIS 系列 - 数据仓库中实现 Slowly Changing Dimension 缓慢渐变维度的三种方式
开篇介绍 关于 Slowly Changing Dimension 缓慢渐变维度的理论概念请参看 数据仓库系列 - 缓慢渐变维度 (Slowly Changing Dimension) 常见的三种类型 ...
- 微软BI 之SSIS 系列 - 使用 Script Component Destination 和 ADO.NET 解析不规则文件并插入数据
开篇介绍 这一篇文章是 微软BI 之SSIS 系列 - 带有 Header 和 Trailer 的不规则的平面文件输出处理技巧 的续篇,在上篇文章中介绍到了对于这种不规则文件输出的处理方式.比如下图中 ...
- 微软BI 之SSIS 系列 - 在 SSIS 中导入 ACCESS 数据库中的数据
开篇介绍 来自 天善学院 一个学员的问题,如何在 SSIS 中导入 ACCESS 数据表中的数据. 在 SSIS 中导入 ACCESS 数据库数据 ACCESS 实际上是一个轻量级的桌面数据库,直接使 ...
- 微软BI 之SSIS 系列 - MVP 们也不解的 Scrip Task 脚本任务中的一个 Bug
开篇介绍 前些天自己在整理 SSIS 2012 资料的时候发现了一个功能设计上的疑似Bug,在 Script Task 中是可以给只读列表中的变量赋值.我记得以前在 2008 的版本中为了弄明白这个配 ...
- 微软BI 之SSIS 系列 - 使用 Script Task 访问非 Windows 验证下的 SMTP 服务器发送邮件
原文:微软BI 之SSIS 系列 - 使用 Script Task 访问非 Windows 验证下的 SMTP 服务器发送邮件 开篇介绍 大多数情况下我们的 SSIS 包都会配置在 SQL Agent ...
- 微软BI 之SSIS 系列 - 带有 Header 和 Trailer 的不规则的平面文件输出处理技巧
案例背景与需求介绍 之前做过一个美国的医疗保险的项目,保险提供商有大量的文件需要发送给比如像银行,医疗协会,第三方服务商等.比如像与银行交互的 ACH 文件,传送给协会的 ACH Credit 等文件 ...
- 微软BI 之SSIS 系列 - Lookup 组件的使用与它的几种缓存模式 - Full Cache, Partial Cache, NO Cache
开篇介绍 先简单的演示一下使用 Lookup 组件实现一个简单示例 - 从数据源表 A 中导出数据到目标数据表 B,如果 A 数据在 B 中不存在就插入新数据到B,如果存在就更新B 和 A 表数据保持 ...
- 微软BI 之SSIS 系列 - Merge, Merge Join, Union All 合并组件的使用以及Sort 排序组件同步异步的问题
开篇介绍 SSIS Data Flow 中有几个组件可以实现不同数据源的数据合并功能,比如 Merger, Merge Join 和 Union All.它们的功能比较类似,同时也比较容易混淆,下面是 ...
随机推荐
- XidianOJ 1172 Hiking
题目描述 BlacKin and GKCY are going hiking together. Besides their personal items, there are some items ...
- LINUX内核分析第八周学习总结:进程的切换和系统的一般执行过程
韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.进程切换的关 ...
- POJ 2502 - Subway Dijkstra堆优化试水
做这道题的动机就是想练习一下堆的应用,顺便补一下好久没看的图论算法. Dijkstra算法概述 //从0出发的单源最短路 dis[][] = {INF} ReadMap(dis); for i = 0 ...
- 记一次 Ubuntu 使用 arptables 抵御局域网 ARP 攻击
. . . . . 前段时间大概有一个月左右,租房的网络每天都断一次,每次断大概一两分钟左右就恢复了,所以没太在意.直到有一天晚上,LZ 正在写博客,但是网络频繁中断又重新连上再中断.待 LZ 好不容 ...
- 普林斯顿结构 VS 哈佛结构
1. 冯·诺依曼结构 冯·诺依曼结构,又称为普林斯顿体系结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构.取指令和取操作数都在同一总线上,通过分时复用的方式进行:缺点是在高速运行时,不能 ...
- OutSystems学习一,安装以及入门
官方网站:http://www.outsystems.com/home/HomePage.aspx 安装完成后,在官网申请自己的管理云平台 启动客户端 详细参考帮助,跟着走就行
- .net下各个数据类型所占用的字节
Console.WriteLine(sizeof(int)); Console.WriteLine(sizeof(short)); Console.WriteLine(sizeof(char)); C ...
- Sql 中text类型字段判断是否为空
用 len关键字,字段=''会报错:数据类型 text 和 varchar 在 equal to 运算符中不兼容. 正确方法: 1. 字段 is null 2. datalength(字段)=0 注: ...
- Java 测试URL地址是否能正常连接
public static int testWsdlConnection(String address) throws Exception { int status = 404; try { URL ...
- IIS访问提示您不具备查看该目录或页面的权限,因为访问控制列表 (ACL) 对 Web 服务器上的该资源进行了配置
1. 检查IIS权限,webmail目录权限. 2. 在本地安全策略中,设置从网络访问本地服务器与拒绝从网络访问本地服务器.中查看相关用户的权限 3. 如果上面的步骤还是有问题.使用下面的步骤进行设置 ...