Welcome

首页 / 数据库 / SQLServer / 在Microsoft SQL Server 2000数据仓库中使用分区

在Microsoft SQL Server 2000数据仓库中使用分区2007-10-23概述

本文讨论数据仓库中数据分区的作用。关系型数据仓库和分析服务多维数据集都支持数据分区。分区的逻辑概念在 Microsoft® SQL Server™ 的两个引擎中是相同的:通过键(例如日期)对数据进行水平分区。在关系型数据库中,分区是通过创建单独的物理表(例如为每个月的数据创建一个表)并且定义一个成员表的联合视图来实现的。与此类似, Server Enterprise Edition 中的分析服务支持显式的多维数据集分区。在关系型数据库和联机分析处理 (OLAP) 引擎中,物理存储的复杂性对于分析用户是不可见的。

数据仓库分区的优点:

大大缩短查询时间。

减少加载时间,改善数据库的可维护性。

解决从活动数据库中删除旧数据时出现的数据修剪问题。

该技术需要创建比非分区系统更复杂的数据分阶段应用程序。本文介绍设计、实现和维护水平分区数据仓库的最佳方法。

因为有效的分区计划可以极大地改善查询性能,所以我们极力建议您对大型分析服务系统进行分区。尽管对于某些特定的数据仓库维护问题,对关系型数据仓库进行分区是有效的解决方案,但通常不推荐您这样做。

在 SQL Server 2000 关系型数据仓库中使用分区

分区视图联接来自一组成员的水平分区数据,使数据看起来象来自同一张表。SQL Server 2000 区分本地分区视图和分布式分区视图。在本地分区视图中,所有相关表和视图驻留在 SQL Server 的同一实例上。在分布式分区视图中,相关表中至少有一张表驻留在其他某个(远程)服务器上。建议您不要将分布式分区视图用于数据仓库应用程序。

矢量数据仓库围绕事实(标量)和矢量构建,从物理上通常表示为星形架构和雪花形架构,极少有同时包含事实和矢量的完全非正交化的平面表。由于矢量架构是最常见的关系型数据仓库结构,本文集中讨论这类架构的分区。下面的建议也适用于其他通用数据仓库架构。

分区的优点

数据修剪

许多数据仓库管理员会定期将陈旧的数据归档。例如,一个单击流数据仓库可能只将详细数据联机保留三至四个月。其他常见的规则可能是联机保留 13 个月、37 个月或 10 年,当旧数据不在活动窗口中时就归档并从数据库中删除。这种滚动窗口结构是大数据仓库通常采取的做法。

在没有分区表的情况下,从数据库中删除旧数据的进程需要一个很大的 DELETE 语句,例如:

DELETE FROM fact_table
WHERE date_key < 19990101

执行该语句开销会非常大,可能比同一张表的加载进程需要更多的时间。相反,对于分区表,管理员重新定义 UNION ALL 视图以排除最旧的表,然后将该表从数据库中删除(假设已确保备份该表),这个过程几乎可以在瞬间完成。

后面我们会讨论到,维护分区表的费用也很高。如果数据修剪是采用分区的唯一原因,设计者应考虑以数据分解的方式从未分区的表中删除旧数据。在低优先级进程上连续运行一个每次删除 1000 行(用“set rowcount 1000”命令)的脚本,直至删除所有希望删除的数据。该技术可在大系统上有效运用,比创建必要的分区管理系统更为直接。根据加载量和系统使用状况,该技术适合于某些系统,并应该考虑在系统上进行基准测试。