[DB2]数据库设计:取得最佳性能的准则 (4)
发表于:2007-05-26来源:作者:点击数:
标签:
四、表空间与表设计方面的考虑 1. 记录大小和页宽 固定长度的记录要优于可变长度的记录,因为DB2代码专门为处理固定长度的记录进行优化。如果记录是固定长度的,那么就无需将其从存储它的初始页面转移到其他地方。而对于可变长度的记录,其长度可能会变得不
四、表空间与表设计方面的考虑
1. 记录大小和页宽
固定长度的记录要优于可变长度的记录,因为DB2代码专门为处理固定长度的记录进行优化。如果记录是固定长度的,那么就无需将其从存储它的初始页面转移到其他地方。而对于可变长度的记录,其长度可能会变得不再适合初始页,因此必须将其转移到其他页。之后,每当需要访问该记录时,就必须发生额外的页引用。DB2 UDB V8中的一种新特性允许在需要的时候修改(ALTER)某一列的宽度,这样一来,即使您不能确定将来数据长度的增长情况,也不再需要创建可变长度的记录。
一个页中所能存放的记录的数目也是值得考虑的一个方面。DB2为页宽提供了很多选项(4KB、8KB、16KB和32KB)。一开始的时候,可以选择默认选项(4KB),如果行的长度很小,或者对数据的访问基本上是随机的,则更应该选择这一选项。不过,在有些情况下,则需要考虑使用更大的页宽。如果一个表中各行的长度要大于4KB,那么就需要使用更大的页宽,因为DB2不支持跨页(spanned)记录。
还有一些情况下,对于一条固定长度的记录,其总长度可能刚好比4KB的一半大一点点,这时一个页只能容纳一条记录。对于刚好比页宽的 1/3、1/4 大一点点的记录,情形也是类似的。这种设计不仅浪费DASD空间,而且,对于很多DB2操作,还需要消耗更多的资源。因此,对于这一类的记录,应该考虑使用更大的页宽,这样浪费的空间相对要少一些。
其他可能的页宽是8KB、16KB和32KB。页宽不是在CREATE TABLE语句中直接指定的。相反,表的页宽是由相应的缓冲池的页宽来确定的,这个缓冲池也就是为包含该表的表空间所指定的缓冲池。要了解更多细节,请参考DB2 SQL Reference手册中的CREATE TABLESPACE语句。
2. 反规范化方面的考虑
逻辑数据模型是数据的理想蓝图。物理数据模型才是对数据的现实的实现。规范化只关注数据的意义,而没有考虑对于访问数据的应用程序的
性能需求。完全规范化的
数据库设计在性能方面要受到质疑。
这种性能问题的最常见的例子是连接(join)操作。通常,规范化过程最终将相关的信息放入不同的表中。于是应用程序需要从多个这样的表中访问数据。关系数据库为SQL语句提供了从一个以上的表中访问信息的能力,这是通过 连接多个表来完成的。连接操作可能要消耗大量的资源和时间,这取决于表的数量以及这些表各自的长度。
像I/T中的很多事情一样, 这里也可以考虑一种权衡的方法。对于具有经常被请求的列的多个表,一种是复制其中的数据,一种是执行表连接,两者谁的成本更高呢?在逻辑数据库设计过程中,您可以毫无保留地规范化数据模型,然后再加入一定程度的反规范化,作为潜在的性能调优的一种选择。如果您确实打算反规范化,那么一定要为此制作完整文档:较详细地描述您所采取的反规范化步骤背后的原因。
3. 设计大型的表
访问非常大的DB2表时,相应地要消耗很多的资源:CPU、内存和I/O。在设计大型表的时候,为了提高性能,用户可以做的最重要的两件事是:
1) 实现分区。
2) 创建有用的索引。
下面将更详细地讨论这两个话题。
原文转自:http://www.ltesting.net