执行SSAS 2005中的预先缓存

为了最优化多维数据集(cube)的查询性能,我们选择了MOLAP存储。由于我们已经有许多多维数据集,现在我们就专注于保持多维数据集是最新的,这是由于数据仓库中的数据变化频繁。您能给我们讲解如何实现SSAS中的预先缓存(Proa
为了最优化多维数据集(cube)的查询性能,我们选择了MOLAP存储。由于我们已经有许多多维数据集,现在我们就专注于保持多维数据集是最新的,这是由于数据仓库中的数据变化频繁。您能给我们讲解如何实现SSAS中的预先缓存(Proactive Caching)功能的细节吗?

  专家解答

  SSAS支持三种存储模式:

   MOLAP – 存储压缩成专有格式的细节数据和集合;比如,完成数据的一个完整副本而查询性能是很好的。
   HOLAP – 跟MOLAP一样存储集合,但细节数据则按照要求从关系数据源中存取。
   ROLAP – 从关系数据源可以存取细节数据和集合
  请注意,对于MOLAP 或者 HOLAP存储来说,只要关系数据源改变了,立方块就是废弃的。预先缓存(Proactive caching)是SSAS中的一种可以让用户确定何时处理度量组分区和纬度的功能,这是由于关系数据源中的数据经常变化。当执行预先缓存时,SSAS会按照每个你指定的参数,自动解决保持立方块最新状态的问题。预先缓存的另一种选择是开发一个处理纬度和度量组分区的SSIS程序包;你要定期执行这个SSIS程序包。

  预先缓存的一个典型情况是,你有一个总是定期增加最新数据的度量组分区,然后在某个时刻,那个分区和现有的一个分区合并了。分区中的数据经常是基于事务数据确定的。例如,在白天发生新的事务时,你希望每小时更新分区,到了晚上,你会把分区的内容整合到当前一周的分区中。这种方法可以让你经常处理分区,保持它更新到与关系数据源一样,但是需要每次都处理最小化数据。

  预先缓存支持三种告知SSAS关系数据源已经改变的通知方法:

  SQL Server(2000或更高的版本)

  客户端启动

  预定的轮询

  SQL Server通知只能在关系数据源是SQL Server 2000或更高版本的数据库的情况下使用。当数据变动时,SQL Server增加跟踪事件(Trace events)。为了捕获这些跟踪事件,SSAS一定要以管理员的权限连接到SQL Server。用SQL Server通知,度量组分区总是通过Full Process得到处理,而Full Process丢弃分区的内容并重建它。利用Update进程来处理纬度,而Update进程获得关系数据源中的插入、更新和删除。

  通过发送一个NotifyTableChange XMLA命令到SSAS服务器来执行客户端启动通知。比如,每次数据仓库更新过程完成时,一个更新数据仓库的SSIS程序包能够利用Analysis Services Execute DDL Task来发送NotifyTableChange XMLA命令到SSAS。

  预定轮询仅仅定期查询关系数据源以确定数据是否改变。 在这个方法中,我们可以利用Adventure Works DW SSAS示例数据库连同SQL Server 2005来进行预先缓存的安装。

  执行预先缓存

  首先从Microsoft SQL Server 2005程序组中打开SSMS并连接到一个分析服务的服务器。

  步骤一

  深入到Adventure Works立方块的Internet Sales度量组分区中。

 

  步骤二

  右键单击Internet_Sales_2004分区并从下拉菜单中选择属性。在选择页的列表框中单击预先缓存,显示对话框如下:

 
 

  有一些预先定义的设置如上图所示。默认的设置是MOLAP且预先缓存不可用。比如,SSAS不能自动更新分区。你可以把滑块移动到标准设置中的任何一个地方。你也可以启动一个标准设置,然后在底部的对话框(在上面没有显示)按一下选项按钮来定制。

  步骤三

  将预先缓存设置对话框中的滑块移至预定的MOLAP,接着点击底部对话框(上图没有显示)的选项按钮;你会在常规选项卡上看到如下的缓存设置。 

 

  就预定的MOLAP设置而言,我们看到定期更新缓存的选项是唯一的被选项,而且重建的时间间隔是1天。所以分区会被每天处理。

  在缓存设置对话框中有一些其它的选项。当你把滑块移至不同的标准设置,你会看到这些选项如何变化。现在,让我们来描述这些选项和设置:

  Silence interval是在更新通知之后,处理分区之前等待的时间。这考虑到在开始处理分区之前的其它更新。

  Silence override interval是在更新通知之后,处理分区之前等待的最长时间。如果没有Silence override interval,你可以令人信服地拥有不断发生的变化并且分区永远不会被处理。

  潜伏期(Latency)是关系数据源中有变化之后,分区被处理时或之前,你想利用MOLAP缓存的最大时间间隔。换句话说,当现有的MOLAP缓存正在重建时,你有可能还在继续使用它。一旦潜伏期到来,MOLAP缓存将被删除,查询可以通过返回关系数据源得到满足。

MOLAP缓存被重建时,Bring online immediately(当检查时)会满足对关系数据源的查询。
  使ROLAP集合可用(当检查时)可以在关系数据原中创建物化的集合视图。

  步骤四

  单击通知标签来查看可用选项:

 

  对于SQL Server和客户端启动通知,你必须指定跟踪的表,比如,哪张表你关心它是否有变动。

  对客户端启动通知,你可以利用SSIS中的Analysis Services Execute DDL Task并发送类似于以下内容的XMLA:

<Command>
  <NotifyTableChange>
    <Provider>SQLOLEDB</Provider>
    <DataSource>localhost</DataSource>
    <InitialCatalog>AdventureWorksDW</InitialCatalog>  
    <TableNotifications>
      <TableNotification>
        <DBTableName>FactInternetSales</DBTableName>
        <DBSchemaName>dbo</DBSchemaName>
      </TableNotification>
    </TableNotifications>
  </NotifyTableChange>
</Command>


  步骤五

  单击通知标签中的Scheduled polling radio按钮,查看/安装通知选项: 

 

 该轮询时间间隔指定多久轮询关系数据源的变化。轮询查询旨在执行查询来确定是否有新的行。这个查询必须返回一行和单独的一列。比如,像LoadedDate的日期栏的最大值。SSAS必须保持返回值来确定它什么时候有变动,若有变动,则意味着需要载入新数据。点击Enable incremental updates,这样仅仅抽取关系数据源中新的行。这需要进入查询进程,而查询进程必须通过从轮询查询中返回的单列正确识别新的行。示例查询显示如下(你不能在对话框中看到整个查询):

  -- Add LoadedDate column to table
  ALTER TABLE dbo.FactInternetSales
  ADD LoadedDate DATETIME NOT NULL DEFAULT GETDATE()
  -- Polling query
  SELECT MAX(LoadedDate) LoadedDate
  FROM dbo.FactInternetSales
  -- Processing query
  SELECT * FROM dbo.FactInternetSales
  WHERE LoadedDate > ? AND LoadedDate <= ?


  因为FactInternetSales表没有可用于查询的适当的列,所以增加了DATETIME列。

  你可以在预先缓存属性的对话框中尝试剩下的标准设置,以此来理解预先缓存的基本性能。另外,你可以通过定制化来满足具体的要求。
 
本篇文章来源于:开发学院 http://edu.codepub.com   原文链接:http://edu.codepub.com/2009/0826/14433.php

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值