WEB开发网
开发学院数据库MSSQL Server 在Microsoft SQL Server 2000数据仓库中使用分区 阅读

在Microsoft SQL Server 2000数据仓库中使用分区

 2007-10-23 15:23:54 来源:WEB开发网   
核心提示:总结建议中到大型分析服务多维数据集(包含 10 亿行以上的事实)使用本地分区,分析服务数据库的查询性能可以通过分区得到改善,在Microsoft SQL Server 2000数据仓库中使用分区(7),维护分区多维数据集很容易,尤其在从多维数据集中丢弃旧数据的情况下,这可能是一个单独的 ' 过程,可能由 DTS

总结

建议中到大型分析服务多维数据集(包含 10 亿行以上的事实)使用本地分区。分析服务数据库的查询性能可以通过分区得到改善。维护分区多维数据集很容易,尤其在从多维数据集中丢弃旧数据的情况下。然而,对多维数据集进行分区需要一个管理这些分区的应用程序。

在概念上,在关系型数据仓库中分区与在分析服务中分区相似。和分析服务一样,必须创建应用程序来管理关系分区。有关应在关系型数据仓库中进行分区的观点并不是强制性的。分区解决了某些维护问题,例如修剪旧数据,但这是以系统复杂性为代价的。与建立良好索引的单个表相比,查询性能并没有得到改善。

分析服务和 SQL Server 关系型数据库都支持分布式分区,即分区驻留在不同的服务器上。关于分析服务中分布式分区的问题将留到另一篇文章中讨论。我们不推荐为支持特定查询的 SQL Server 2000 数据仓库系统划分分布关系分区。

使用大量分区可改善分区多维数据集的查询性能。大型多维数据集的开发人员应该考虑按多个矢量进行分区,以尽可能改善用户查询的选择性,同时通过提供并行处理的机会来改善处理性能。

极力推荐对大型分析服务系统进行分区。尽管对于某些特定的仓库维护问题,对关系型数据仓库进行分区是有效而性能良好的解决方案,但通常不推荐您这样做。

更多信息

Microsoft SQL Server Books Online 包含关于索引视图的信息。要获得更多信息,请参阅以下资源。

  • Microsoft SQL Server Web 站点 http://www.microsoft.com/sql/(英文)。
  • Microsoft SQL Server 开发人员中心 http://msdn.microsoft.com/sqlserver(英文)。
  • SQL Server 杂志 http://www.sqlmag.com(英文)。
  • news://news.microsoft.com 的 microsoft.public.sqlserver.server 和 microsoft.public.sqlserver.datawarehouse 新闻组(英文)。
  • SQL Server 上的 Microsoft Official Curriculum 课程。有关最新课程信息,请参阅 http://www.microsoft.com/trainingandservices(英文)。

    附录:复制分区的 VBScript 代码示例

    '/*********************************************************************
    ' 文件:ClonePart.vbs
    '
    '说明:根据 FoodMart 2000 Sales 多维数据集中的最新分区,
    '   这个脚本示例会在该多维数据集中创建新的分区。
    '   此脚本的目的是显示用于复制一个分区的 DSO 呼叫类型。
    '   产生的分区将经过处理,但多维数据集中
    '   不会增加任何数据
    '   
    '   脚本用户可在运行脚本和查看结果后
    '   删除产生的分区。
    '
    ' 参数: 无
    '*********************************************************************/
     
      Call ClonePart
    Sub ClonePart()
      On Error Resume Next
      Dim intDimCounter, intErrNumber
      Dim strOlapDB, strCube, strDB, strAnalysisServer, strPartitionNew
      Dim dsoServer, dsoDB, dsoCube, dsoPartition, dsoPartitionNew
      ' 初始化服务器、数据库和多维数据集名变量。
      strAnalysisServer = "LocalHost"
      strOlapDB = "FoodMart 2000"
      strCube = "Sales"
      ' VBScript 不支持直接使用枚举常量。.
      ' 然而,可定义常量以取代枚举。
      Const stateFailed = 2
      Const olapEditionUnlimited = 0
      ' 连接到分析服务器。
      Set dsoServer = CreateObject("DSO.Server")
      dsoServer.Connect strAnalysisServer   
      ' 如果连接失败,则结束枚举。
      If dsoServer.State = stateFailed Then
        MsgBox "Error-Not able to connect to '" & strAnalysisServer _
         & "' Analysis server.", ,"ClonePart.vbs"
        Err.Clear  
        Exit Sub
      End if
      ' 某些分区管理功能只有在分析服务的
      ' Enterprise 和 Developer 发行版中
      ' 才可使用。
      If dsoServer.Edition <> olapEditionUnlimited Then
        MsgBox "Error-This feature requires Enterprise or " & _
         "Developer Edition of SQL Server to " & _
         "manage partitions.", , "ClonePart.vbs"
        Exit Sub
      End If
      ' 确定数据库中有有效的数据源。
      Set dsoDB = dsoServer.mdStores(strOlapDB)  
      If dsoDB.Datasources.Count = 0 Then
        MsgBox "Error-No data sources found in '" & _
         strOlapDB & "' database.", , "ClonePart.vbs"
        Err.Clear  
        Exit Sub
      End If
     
      ' 查找多维数据集。
      If (dsoDB.mdStores.Find(strCube)) = 0 then
        MsgBox "Error-Cube '" & strCube & "' is missing.", , _
         "ClonePart.vbs"
        Err.Clear  
        Exit Sub
      End If
      ' 将 dsoCube 变量设置到所要的多维数据集。
      Set dsoCube = dsoDB.MDStores(strCube)
      ' 查找分区
      If dsoCube.mdStores.Count = 0 Then
        MsgBox "Error-No partitions exist for cube '" & strCube & _
         "'.", , "ClonePart.vbs"
        Err.Clear  
        Exit Sub
      End If
      ' 将 dsoPartition 变量设置到所要的分区。
      Set dsoPartition = dsoCube.MDStores(dsoCube.MDStores.Count)
      MsgBox "New partition will be based on existing partition: " _
        & chr(13) & chr(10) & _
        dsoDB.Name & "." & dsoCube.Name & "." & _
        dsoPartition.Name, , "ClonePart.vbs"
      ' 从数据源获得引用字符,因为
      ' 不同的数据源使用不同的引用字符。
      Dim sLQuote, sRQuote
      sLQuote = dsoPartition.DataSources(1).OpenQuoteChar
      sRQuote = dsoPartition.DataSources(1).CloseQuoteChar
    '*********************************************************************
    ' 根据所要的分区创建新分区。
    '*********************************************************************
      ' 创建新的暂时分区。
      strPartitionNew = "NewPartition" & dsoCube.MDStores.Count
      Set dsoPartitionNew = dsoCube.MDStores.AddNew("~temp")
      ' 从所要的分区复制属性到
      ' 新分区。
      dsoPartition.Clone dsoPartitionNew
      ' 将 "~temp" 分区名更改为
      ' 想要供新分区使用的名称。
      dsoPartitionNew.Name = strPartitionNew
      dsoPartitionNew.AggregationPrefix = strPartitionNew & "_"
      ' 设置新分区事实表。
      dsoPartitionNew.SourceTable = _
        sLQuote & "sales_fact_dec_1998" & sRQuote
      ' 设置新分区的 FromClause 和 JoinClause
      ' 属性。
      dsoPartitionNew.FromClause = Replace(dsoPartition.FromClause, _
        dsoPartition.SourceTable, dsoPartitionNew.SourceTable)
      
      dsoPartitionNew.JoinClause = Replace(dsoPartition.JoinClause, _
        dsoPartition.SourceTable, dsoPartitionNew.SourceTable)
      ' 将受影响的层次和维度的 SliceValue 属性
      ' 更改为所要的值,以更改新分区使用的
      ' 数据切片定义。
      dsoPartitionNew.Dimensions("Time").Levels("Year").SliceValue = "1998"
      dsoPartitionNew.Dimensions("Time").Levels("Quarter").SliceValue = "Q4"
      dsoPartitionNew.Dimensions("Time").Levels("Month").SliceValue = "12"
      ' 估计行数。    
      dsoPartitionNew.EstimatedRows = 18325
      ' 添加另一筛选。SourceTableFilter 提供另外的
      ' 机会,可将 WHERE 从句加入要填充的 SQL 查询。
      ' 我们使用此筛选程序以确保新分区中未包含
      ' 任何数据行。基于此示例代码的目的,我们不想
      ' 更改 FoodMart 多维数据集中的数据。如果您想要新分区中
      ' 看数据,请去掉此行。
      dsoPartitionNew.SourceTableFilter = dsoPartitionNew.SourceTable _
        & "." & sLQuote & "time_id" & sRQuote & "=100"
      ' 将分区定义保存在元数据知识库中。
      dsoPartitionNew.Update
      '检查新分区结构的有效性。
      IF NOT dsoPartitionNew.IsValid Then
        MsgBox "Error-New partition structure is invalid."
        Err.Clear  
        Exit Sub
      End If
      MsgBox "New partition " & strPartitionNew & " has been created and " _
        & "processed. To see the new partition in Analysis Manager, you " _
        & "may need to refresh the list of partitions in the Sales cube " _
        & "of FoodMart 2000. The new partition contains no data.", , _
        "ClonePart.vbs"
      ' 下一语句已去掉,将处理分区。
      ' 在实际分区管理系统中,这可能是一个单独的
      ' 过程,可能由 DTS 管理。
      ' dsoPartitionNew.Process
      ' 清理。
      Set dsoPartition = Nothing 
      Set dsoPartitionNew = Nothing  
      Set dsoCube = Nothing
      Set dsoDB = Nothing
      dsoServer.CloseServer
      Set dsoServer = Nothing
    End Sub
  • 上一页  2 3 4 5 6 7 

    Tags:Microsoft SQL Server

    编辑录入:爽爽 [复制链接] [打 印]
    赞助商链接