为了最优化多维数据集(cube)
![](/icons/24474de.gif)
查询性能
![](/icons/24474dou.gif)
我们选择了MOLAP存储
![](/icons/24474dou2.gif)
由于我们已经有许多多维数据集
![](/icons/24474dou.gif)
现在我们就专注于保持多维数据集是最新
![](/icons/24474de.gif)
![](/icons/24474dou.gif)
这是由于数据仓库中
![](/icons/24474de.gif)
数据变化频繁
![](/icons/24474dou2.gif)
您能给我们讲解如何实现SSAS中
![](/icons/24474de.gif)
预先缓存Cache(Proactive Caching)功能
![](/icons/24474de.gif)
细节吗?
专家解答
SSAS支持 3种存储模式:
MOLAP – 存储压缩成专有格式
![](/icons/24474de.gif)
细节数据和集合;比如
![](/icons/24474dou.gif)
完成数据
![](/icons/24474de.gif)
![](/icons/24474yi.gif)
个完整副本而查询性能是很好
![](/icons/24474de.gif)
HOLAP – 跟MOLAP
![](/icons/24474yi.gif)
样存储集合
![](/icons/24474dou.gif)
但细节数据则按照要求从关系数据源中存取
ROLAP – 从关系数据源可以存取细节数据和集合
请注意
![](/icons/24474dou.gif)
对于MOLAP 或者 HOLAP存储来说
![](/icons/24474dou.gif)
只要关系数据源改变了
![](/icons/24474dou.gif)
立方块就是废弃
![](/icons/24474de.gif)
![](/icons/24474dou2.gif)
预先缓存Cache(Proactive caching)是SSAS中
![](/icons/24474de.gif)
![](/icons/24474yi.gif)
种可以让用户确定何时处理度量组分区和纬度
![](/icons/24474de.gif)
功能
![](/icons/24474dou.gif)
这是由于关系数据源中
![](/icons/24474de.gif)
数据经常变化
![](/icons/24474dou2.gif)
当执行预先缓存Cache时
![](/icons/24474dou.gif)
SSAS会按照每个你指定
![](/icons/24474de.gif)
参数
![](/icons/24474dou.gif)
自动解决保持立方块最新状态
![](/icons/24474de.gif)
问题
![](/icons/24474dou2.gif)
预先缓存Cache
![](/icons/24474de.gif)
另
![](/icons/24474yi.gif)
种选择是开发
![](/icons/24474yi.gif)
个处理纬度和度量组分区
![](/icons/24474de.gif)
SSIS
![](/icons/24474chengxu.gif)
包;你要定期执行这个SSIS
![](/icons/24474chengxu.gif)
包
预先缓存Cache
![](/icons/24474de.gif)
![](/icons/24474yi.gif)
个典型情况是
![](/icons/24474dou.gif)
你有
![](/icons/24474yi.gif)
个总是定期增加最新数据
![](/icons/24474de.gif)
度量组分区
![](/icons/24474dou.gif)
然后在某个时刻
![](/icons/24474dou.gif)
那个分区和现有
![](/icons/24474de.gif)
![](/icons/24474yi.gif)
个分区合并了
![](/icons/24474dou2.gif)
分区中
![](/icons/24474de.gif)
数据经常是基于事务数据确定
![](/icons/24474de.gif)
![](/icons/24474dou2.gif)
例如
![](/icons/24474dou.gif)
在白天发生新
![](/icons/24474de.gif)
事务时
![](/icons/24474dou.gif)
你希望每小时更新分区
![](/icons/24474dou.gif)
到了晚上
![](/icons/24474dou.gif)
你会把分区
![](/icons/24474de.gif)
内容整合到当前
![](/icons/24474yi.gif)
周
![](/icons/24474de.gif)
分区中
![](/icons/24474dou2.gif)
这种思路方法可以让你经常处理分区
![](/icons/24474dou.gif)
保持它更新到和关系数据源
![](/icons/24474yi.gif)
样
![](/icons/24474dou.gif)
但是需要每次都处理最小化数据
预先缓存Cache支持 3种告知SSAS关系数据源已经改变
![](/icons/24474de.gif)
通知思路方法:
SQL Server(2000或更高
![](/icons/24474de.gif)
版本)
客户端启动
预定
![](/icons/24474de.gif)
轮询
SQL Server通知只能在关系数据源是SQL Server 2000或更高版本
![](/icons/24474de.gif)
数据库
![](/icons/24474de.gif)
情况下使用
![](/icons/24474dou2.gif)
当数据变动时
![](/icons/24474dou.gif)
SQL Server增加跟踪事件(Trace events)
![](/icons/24474dou2.gif)
为了捕获这些跟踪事件
![](/icons/24474dou.gif)
SSAS
![](/icons/24474yi.gif)
定要以管理员
![](/icons/24474de.gif)
权限连接到SQL Server
![](/icons/24474dou2.gif)
用SQL Server通知
![](/icons/24474dou.gif)
度量组分区总是通过Full Process得到处理
![](/icons/24474dou.gif)
而Full Process丢弃分区
![](/icons/24474de.gif)
内容并重建它
![](/icons/24474dou2.gif)
利用Update进程来处理纬度
![](/icons/24474dou.gif)
而Update进程获得关系数据源中
![](/icons/24474de.gif)
插入、更新和删除
通过发送
![](/icons/24474yi.gif)
个Not
![](/icons/24474if.gif)
yTableChange XMLA命令到SSAS服务器来执行客户端启动通知
![](/icons/24474dou2.gif)
比如
![](/icons/24474dou.gif)
每次数据仓库更新过程完成时
![](/icons/24474dou.gif)
![](/icons/24474yi.gif)
个更新数据仓库
![](/icons/24474de.gif)
SSIS
![](/icons/24474chengxu.gif)
包能够利用Analysis Services Execute DDL Task来发送Not
![](/icons/24474if.gif)
yTableChange XMLA命令到SSAS
预定轮询仅仅定期查询关系数据源以确定数据是否改变
在这个思路方法中
![](/icons/24474dou.gif)
我们可以利用Adventure Works DW SSAS举例数据库连同SQL Server 2005来进行预先缓存Cache
![](/icons/24474de.gif)
安装
执行预先缓存Cache
首先从Microsoft SQL Server 2005
![](/icons/24474chengxu.gif)
组中打开SSMS并连接到
![](/icons/24474yi.gif)
个分析服务
![](/icons/24474de.gif)
服务器
步骤
深入到Adventure Works立方块
![](/icons/24474de.gif)
Internet Sales度量组分区中
![SSAS 2005中<img src='/icons/24474de.gif' />预先缓存Cache](http://www.crazycoder.cn/WebFiles/20092/949a5a47-d969-4591-a7f2-8b3a2409a3cb.jpg)
步骤 2
右键单击Internet_Sales_2004分区并从下拉菜单中选择属性
![](/icons/24474dou2.gif)
在选择页
![](/icons/24474de.gif)
列表框中单击预先缓存Cache
![](/icons/24474dou.gif)
显示对话框如下:
有
![](/icons/24474yi.gif)
些预先定义
![](/icons/24474de.gif)
设置如上图所示
![](/icons/24474dou2.gif)
默认
![](/icons/24474de.gif)
设置是MOLAP且预先缓存Cache不可用
![](/icons/24474dou2.gif)
比如
![](/icons/24474dou.gif)
SSAS不能自动更新分区
![](/icons/24474dou2.gif)
你可以把滑块移动到标准设置中
![](/icons/24474de.gif)
任何
![](/icons/24474yi.gif)
个地方
![](/icons/24474dou2.gif)
你也可以启动
![](/icons/24474yi.gif)
个标准设置
![](/icons/24474dou.gif)
然后在底部
![](/icons/24474de.gif)
对话框(在上面没有显示)按
![](/icons/24474yi.gif)
下选项按钮来定制
![](/icons/24474dou2.gif)
步骤 3
将预先缓存Cache设置对话框中
![](/icons/24474de.gif)
滑块移至预定
![](/icons/24474de.gif)
MOLAP
![](/icons/24474dou.gif)
接着点击底部对话框(上图没有显示)
![](/icons/24474de.gif)
选项按钮;你会在常规选项卡上看到如下
![](/icons/24474de.gif)
缓存Cache设置
![SSAS 2005中<img src='/icons/24474de.gif' />预先缓存Cache](http://www.crazycoder.cn/WebFiles/20092/59e28c7b-c237-49c6-a32e-6b16abcc598a.jpg)
就预定
![](/icons/24474de.gif)
MOLAP设置而言
![](/icons/24474dou.gif)
我们看到定期更新缓存Cache
![](/icons/24474de.gif)
选项是唯
![](/icons/24474yi.gif)
![](/icons/24474de.gif)
被选项
![](/icons/24474dou.gif)
而且重建
![](/icons/24474de.gif)
时间间隔是1天
![](/icons/24474dou2.gif)
所以分区会被每天处理
![](/icons/24474dou2.gif)
在缓存Cache设置对话框中有
![](/icons/24474yi.gif)
些其它
![](/icons/24474de.gif)
选项
![](/icons/24474dou2.gif)
当你把滑块移至区别
![](/icons/24474de.gif)
标准设置
![](/icons/24474dou.gif)
你会看到这些选项如何变化
![](/icons/24474dou2.gif)
现在
![](/icons/24474dou.gif)
让我们来描述这些选项和设置:
Silence
![](/icons/24474int.gif)
erval是在更新通知的后
![](/icons/24474dou.gif)
处理分区的前等待
![](/icons/24474de.gif)
时间
![](/icons/24474dou2.gif)
这考虑到在开始处理分区的前
![](/icons/24474de.gif)
其它更新
![](/icons/24474dou2.gif)
Silence override
![](/icons/24474int.gif)
erval是在更新通知的后
![](/icons/24474dou.gif)
处理分区的前等待
![](/icons/24474de.gif)
最长时间
![](/icons/24474dou2.gif)
如果没有Silence override
![](/icons/24474int.gif)
erval
![](/icons/24474dou.gif)
你可以令人信服地拥有不断发生
![](/icons/24474de.gif)
变化并且分区永远不会被处理
![](/icons/24474dou2.gif)
潜伏期(Latency)是关系数据源中有变化的后
![](/icons/24474dou.gif)
分区被处理时或的前
![](/icons/24474dou.gif)
你想利用MOLAP缓存Cache
![](/icons/24474de.gif)
最大时间间隔
![](/icons/24474dou2.gif)
换句话说
![](/icons/24474dou.gif)
当现有
![](/icons/24474de.gif)
MOLAP缓存Cache正在重建时
![](/icons/24474dou.gif)
你有可能还在继续使用它
![](/icons/24474dou2.gif)
![](/icons/24474yi.gif)
旦潜伏期到来
![](/icons/24474dou.gif)
MOLAP缓存Cache将被删除
![](/icons/24474dou.gif)
查询可以通过返回关系数据源得到满足
MOLAP缓存Cache被重建时
![](/icons/24474dou.gif)
Bring _disibledevent=>
![SSAS 2005中<img src='/icons/24474de.gif' />预先缓存Cache](http://www.crazycoder.cn/WebFiles/20092/50f315b3-15c0-487f-a852-92336bf17bb5.jpg)
对于SQL Server和客户端启动通知
![](/icons/24474dou.gif)
你必须指定跟踪
![](/icons/24474de.gif)
表
![](/icons/24474dou.gif)
比如
![](/icons/24474dou.gif)
哪张表你关心它是否有变动
![](/icons/24474dou2.gif)
对客户端启动通知
![](/icons/24474dou.gif)
你可以利用SSIS中
![](/icons/24474de.gif)
Analysis Services Execute DDL Task并发送类似于以下内容
![](/icons/24474de.gif)
XMLA:
<Command>
<Not
![](/icons/24474if.gif)
yTableChange>
<Provider>SQLOLEDB</Provider>
<DataSource>localhost</DataSource>
<InitialCatalog>AdventureWorksDW</InitialCatalog>
<TableNot
![](/icons/24474if.gif)
ications>
<TableNot
![](/icons/24474if.gif)
ication>
<DBTableName>FactInternetSales</DBTableName>
<DBSchemaName>dbo</DBSchemaName>
</TableNot
![](/icons/24474if.gif)
ication>
</TableNot
![](/icons/24474if.gif)
ications>
</Not
![](/icons/24474if.gif)
yTableChange>
</Command>
步骤 5
单击通知标签中
![](/icons/24474de.gif)
Scheduled polling radio按钮
![](/icons/24474dou.gif)
查看/安装通知选项:
该轮询时间间隔指定多久轮询关系数据源
![](/icons/24474de.gif)
变化
![](/icons/24474dou2.gif)
轮询查询旨在执行查询来确定是否有新
![](/icons/24474de.gif)
行
![](/icons/24474dou2.gif)
这个查询必须返回
![](/icons/24474yi.gif)
行和单独
![](/icons/24474de.gif)
![](/icons/24474yi.gif)
列
![](/icons/24474dou2.gif)
比如
![](/icons/24474dou.gif)
像LoadedDate
![](/icons/24474de.gif)
日期栏
![](/icons/24474de.gif)
最大值
![](/icons/24474dou2.gif)
SSAS必须保持返回值来确定它什么时候有变动
![](/icons/24474dou.gif)
若有变动
![](/icons/24474dou.gif)
则意味着需要载入新数据
![](/icons/24474dou2.gif)
点击Enable incremental updates
![](/icons/24474dou.gif)
这样仅仅抽取关系数据源中新
![](/icons/24474de.gif)
行
![](/icons/24474dou2.gif)
这需要进入查询进程
![](/icons/24474dou.gif)
而查询进程必须通过从轮询查询中返回
![](/icons/24474de.gif)
单列正确识别新
![](/icons/24474de.gif)
行
![](/icons/24474dou2.gif)
举例查询显示如下(你不能在对话框中看到整个查询):
--AddLoadedDatecolumntotable
ALTERTABLEdbo.FactInternetSales
ADDLoadedDateDATETIMENOTNULLDEFAULTGETDATE
--Pollingquery
SELECTMAX(LoadedDate)LoadedDate
FROMdbo.FactInternetSales
--Processingquery
SELECT*FROMdbo.FactInternetSales
WHERELoadedDate>?ANDLoadedDate<=?
![](/icons/24474yinwei.gif)
FactInternetSales表没有可用于查询
![](/icons/24474de.gif)
适当
![](/icons/24474de.gif)
列
![](/icons/24474dou.gif)
所以增加了DATETIME列
![](/icons/24474dou2.gif)
你可以在预先缓存Cache属性
![](/icons/24474de.gif)
对话框中尝试剩下
![](/icons/24474de.gif)
标准设置
![](/icons/24474dou.gif)
以此来理解预先缓存Cache
![](/icons/24474de.gif)
基本性能
![](/icons/24474dou2.gif)
另外
![](/icons/24474dou.gif)
你可以通过定制化来满足具体
![](/icons/24474de.gif)
要求