内容提要
物理数据库设计是影响数据库性能的一个最重要的因素。物理数据库设计涵盖了所有和数据库物理结构相关的设计功能,比如表规范化和反规范化、索引、物化视图、数据集群、多维数据集群、表(range)分区还有数据库(hash)分区。
良好的物理数据库设计不仅能够降低硬件资源使用率(I/O,CPU 和网络),而且还可以并提高你的管理效率。良好的物理数据库设计依次对你的业务提供了下面好处:
图 1 显示了一个物理数据库系统的说明。这 3 个深黑框的垂直矩形显示了 3 个不同的物理数据库系统;其他的正方形和矩形框表示的是磁盘上的存储块;所有着色的符号显示表中(比如地理或月份)的数据值。
在这个例子中,一个表已经在 3 个实例 P1、P2 和 P3 上进行了哈希分区。同时,这个表也以 month 进行了范围分区,数据可以很容易的按月添加和删除。这也间接有助于用 month 的谓词查询。数据在每个表中被用多维集群(MDC)进行了集群,而且这是在每个 range 分区中进一步集群。表中的记录也建立了普通的基于记录的(RID-based)索引。对这个表创建一个物化查询表(MQT),它包括聚合数据(比如地理上的平均销售),这些已经编入索引和 MDC 中了。
最佳实践 |
表规范化和非规范化
|
介绍物理数据库设计
数据库设计分三个阶段执行:
物理数据库设计涵盖了数据库设计中影响数据库在磁盘上的具体结构的各个方面,如上面的条目 2 和 3 。 虽然你可以独立于数据库最终使用的平台之外来进行逻辑设计,但是大量物理数据库属性仍依赖于目标 DBMS 的具体内容和语义。物理数据库设计包括下面的属性:
本文包含了所有属性,除了“数据库存储拓扑”和“数据库存储对象分配”这些属性包含在“数据库存储最佳实践”白皮书中。这篇白皮书以及在它里面涉及的文章可以在 DeveloperWorks 的信息管理区里面找到:(http://www.ibm.com/developerworks/data.)
物理数据库设计和数据库本一样古老,第一个关系型数据库原型诞生于 1970 年。因为关系型数据库很先进,所以新的技术被引入以提高操作效率。数据库设计的最初问题是关于表规范化和索引选择,这两点都会在后面讨论到。
今天,我们可以通过正确的分割数据、分布数据和提高索引数据来达到 I/O 降低的目的。所有这些创新都提高了数据库的能力,扩展了物理数据库设计的范围,以及增加了设计选择,这也导致优化数据结构变得更复杂。虽然引入新的物理数据库设计能力主导了 1980s 和 1990s ,然而从那以后就致力于通过自动化和最佳实践来简化过程。
绝大多数物理数据库设计功能和属性都以在运行中减少 I/O 使用为主要目的。然而,在较低程度上,有的在“物理设计方面”帮助提高管理效率和减少 CPU 或网络使用。另外,在 DB2 分区环境中,数据库设计会影响并行度,例如,并行查询处理。
DB2 9.5 数据库系统提供的功能以及工具,已经实现了本文中的最佳实践。
|
表规范化和非规范化的最佳实践
表规范化就是通过减少它的关系直到最简的表格。在建立一个逻辑上的关系型数据库设计中,表规范化是一个关键步骤。规范化有助于避免冗余和不一致的数据;它通常是一个逻辑上的数据模式练习,整个结果在物理设计中实现。
部署一个规范化设计有如下目标:
规范化
规范化的两到三个主要策略是:
第三范式(3NF)
第三范式是由第一范式和第二范式中的规则组成的。下面是第三范式中的规则:
数据库设计中的第一范式,第二范式和第三范式
下面的图表显示了数据库设计的第一范式,第二范式,第三范式。
为了让非规范化模式遵守第一范式,重复的数据元素组、客户地址行和客户名称被规范化到不同的表中。
这个模式要遵守第二范式就必须遵守第一范式,并且所有属性必须完全依赖于一个组合键。
这个模式要遵守第三范式就必须消除所有传递依赖。当一个在非键值域的值取决于另一个非键值域,也就是非组合键的一部分中的值时,就发生了传递依赖。
星型模式和雪花模式
星型模式和雪花模式在数据仓库 BI 系统中已经变得非常普遍。星型模式的基础是从它的维度中分离出系统的事实表。维度是作为数据的属性来定义的,比如 location 或 customer name、或部分描述、事实表参考和数据相关的具体时间。
例如,一个部分描述通常不会随着时间流逝而变化,因此它可以定义为一个维度。与此相反,部分每日销售是随时间变化的,因此是事实。之所以叫做星型模式是因为它的典型特点是一个保存了随着时间变化的大型的中央事实表,被一批维度表所环绕,其中存放着和事实表中事件条目的相关属性。
雪花模式简单的扩充了星型模式。在一个雪花模式设计中,较低基数的属性经常从星型模式中的一个维度表移动到另外一个维度表中,并将这两个维度表建立起关系。
非规范化
和规范化相比,非规范化是压缩表数目的处理过程,因此有可能增加数据库中的冗余数据。非规范化可以非常有效的减少复杂性或进行表连接的数目,并通过减少表的数目来减少数据库的复杂性。非规范化的主要目的是将一个系统的性能最大化并降低系统管理的复杂度。
IBM 分层数据结构
IBM 分层数据结构为用户提供了多级的。每一层提供了不同的细节和数据摘要的级别来满足用户的需要,以便用户(分析者和执行人员)访问。数据年龄随着层次增加而增长(更多的表和每个表更少的数据)。这个结构是专门为混合工作负载、查询性能、快速合并新的数据源以及部署新的应用程序而设计的。
分层结构启用并行的装载、查询、归档和维护,而不需要牺牲查询性能。多级数据可以用于多种类型的分析。
图 2 显示了 5 层的 IBM 分层数据结构
利用这个模式,数据库仓库管理员可以:
关于这个多层结构的更多细节信息请参考“ Best Practices for Creating Scalable High Quality Data Warehouses with DB2 ”。
使用以下规范化和非规范化的最佳实践:
索引设计最佳实践
索引对性能来说非常关键。数据库使用它们以达到下列目的:
然而,索引需要额外的硬件资源:
在 DB2 数据库系统中,一个 B+ 树结构被用作实现索引的底层结构。所有数据都存储在叶子节点,而且键值被随意的链接进一个双向方式中以提供双向的索引扫描。如果指定了 DISALLOW REVERSE SCANS,那么索引不能被反向扫描(不过物理上它是和一个 ALLOW REVERSE SCANS 索引是一样的)。
集群索引
集群索引(特殊索引)告诉数据库管理器这个表中的索引对象必须根据索引定义在磁盘上被集群在一起。例如,如果集群索引被定义在一个日期键上,那么,数据库管理器将尝试在磁盘上、在表对象中,把有相同日期的记录存储在彼此周围。
图 3 中的表定义了两个基于记录的索引:
这个集群的价值是,如果后续查询有在集群属性上的谓词,就只需要运行已经大幅度减少的 I/O 。例如,一个以日期为条件进行的销售查询,如果被查询的日期的相关记录就在附近,因此这只需非常少的 I/O 。
然而,集群索引不仅仅是到数据库的一个指示器。而且当新数据被插入到数据库中时,DB2 内核将尝试把这些记录放在有相同或相似属性的记录附近。如果空间不可用的话,新增加或更改的记录会被重定向到其他非集群位置(也就是说不在相关记录附近)。
当一个 INSERT 发生时(或对集群键值的一个 UPDATE)DB2 内核会扫描集群索引来为这个记录判断一个恰当的位置。因此,在一个有集群 INDEX 的表上的 INSERT 和一些 UPDATE 操作会导致对索引访问的开销,这在非集群索引上不会发生。
因此,集群索引提供了接近于集群的集群,而且随着时间推移数据经常变得不在集群。 REORG 实用工具可以把数据记录重组为完美的集群顺序,虽然这可能是一个费时而且日志密集的操作。
要创建一个集群索引,如下面例子显示的,只需将 CLUSTER 键值简单添加到创建索引语句中,在这里一个集群索引 MyIndex 将基于 T1 表中的 C1 列被创建。每个表中只能有一个集群索引。
CREATE INDEX MyIndex on T1 (C1) CLUSTER |
随着时间的推移数据集群会影响使用集群索引的时间,所以使用 MDC 进行集群是最佳实践的首选,因为它在任何时候都能保证集群,并提供了同时对多个维度进行集群的并行性。请参见在后面的关于如何判断使用何种方法中对 MDC 的讨论。
利用下面定义索引的最佳实践:
例如,如果 PRODKEY 和 STOREKEY 连接到生产并且各自存储维度,那么可以考虑在 PRODKEY、STOREKEY 上创建一个索引。这将有助于一个hub 或 cartesian星型连接访问计划。
db2pd -db MY_DATABASE -tcbstats index |
该指数是参照使用 IID,对于这个索引,它能被链接到 SYSIBM.SYSINDEXES 的 IID 。输出的最后(下面分两段显示)是一个索引统计信息的列表。“ Scans ”显示每个索引上的读取访问,这个输出中的其他指示器提供了对这个索引的写 / 更新活动的深入理解。
注意:指定的 PTCFEE 是在你创建关系型索引或重组时就保留出来的。
删除并重建或重组关系型索引,会创建一个新的页面集合且基本上连续并能提高索引页面预取性能。虽然会更耗时和耗费资源,但是 REORG TABLE 使用工具同样确保数据页的集群。在扫描访问大量数据页面时,集群对索引有很大的帮助。
虽然 DB2 数据库系统提供了动态位图索引、索引 ANDing、和索引 ORing,但是如果这些列经常在 WHERE 子句中被指定,最佳实践是指定组合索引也称作被多列索引。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15082138/viewspace-605290/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/15082138/viewspace-605290/