3.5 数据库物理结构的设计
数据库物理结构的设计是对于给定的逻辑数据模型,选取一个最适合应用环境的物理结构。数据库的物理结构指的是数据库在物理设备上的存储结构与存取方法,它依赖于给定的计算机系统。
数据库物理的结构设计可以分为两步进行:首先确定数据的物理结构,即确定数据库的存取方法和存储结构;然后对物理结构进行评价。对物理结构评价的重点是时间和效率。如果评价结果满足原设计要求,则可以进行物理实施;否则应该重新设计或修改物理结构,有时甚至要返回逻辑设计阶段修改数据模型。
3.5.1 数据库物理结构设计的内容和方法
由于不同的数据库产品所提供的物理环境、存取方法和存储结构各不相同,供设计人员使用的设计变量、参数范围也各不相同,所以数据库的物理设计没有通用的设计方法可遵循,仅有一般的设计内容和设计原则供数据库设计者参考。
数据库设计人员都希望自己设计的数据库物理结构能满足事务在数据库上运行时响应时间少、存储空间利用率高和事务吞吐率大的要求。为此,设计人员应该对要运行的事务进行详细的分析,获得选择数据库物理结构设计所需要的参数,并且应当全面了解给定的DBMS的功能、DBMS提供的物理环境和工具,尤其是存储结构和存取方法。
数据库设计者在确定数据存取方法时,必须清楚3种相关信息。
1)数据库查询事务的信息,它包括查询所需要的关系、查询条件所涉及的属性、连接条件所涉及的属性、查询的投影属性等信息。
2)数据库更新事务的信息,它包括更新操作所需要的关系、每个关系上的更新操作所涉及的属性、修改操作要改变的属性值等信息。
3)每个事务在各关系上运行的频率和性能要求。
例如,某个事务必须在5秒内结束,这对于存取方法的选择有直接影响。这些事务信息会不断地发生变化,故数据库的物理结构要能够做适当的调整,以满足事务变化的需要。
关系数据库物理结构设计的内容主要指选择存取方法和存储结构,包括确定关系、索引、聚簇、日志、备份等的存储安排和存储结构,确定系统配置等。
3.5.2 存取方法的选择
由于数据库是为多用户共享的系统,它需要提供多条存取路径才能满足多用户共享数据的要求。数据库物理结构设计的任务之一就是确定建立哪些存取路径和选择哪些数据存取方法。关系数据库常用的存取方法有索引方法、聚簇方法和HASH方法等。
1.索引存取方法的选择
选择索引存取方法实际上就是根据应用要求确定对关系的哪些属性列建立索引,哪些属性列建立组合索引,哪些索引建立唯一索引等。选择索引方法的基本原则如下。
1)如果一个属性经常在查询条件中出现,则考虑在这个属性上建立索引;如果一组属性经常在查询条件中出现,则考虑在这组属性上建立组合索引。
2)如果一个属性经常作为最大值和最小值等聚集函数的参数,则考虑在这个属性上建立索引。
3)如果一个属性经常在连接操作的连接条件中出现,则考虑在这个属性上建立索引;同理,如果一组属性经常在连接操作的连接条件中出现,则考虑在这组属性上建立索引。
4)关系上定义的索引数要适当,并不是越多越好,因为系统为维护索引要付出代价,查找索引也要付出代价。例如,更新频率很高的关系上定义的索引,数量就不能太多。因为更新一个关系时,必须对这个关系上有关的索引做相应的修改。
2.聚簇存取方法的选择
为了提高某个属性或属性组的查询速度,把这个属性或属性组上具有相同值的元组集中存储在连续的物理块上的处理称为聚簇,这个属性或属性组称为聚簇码。
(1)建立聚簇的必要性
聚簇功能可以大大提高按聚簇码进行查询的效率。例如,要查询计算机系的所有学生名单,假设计算机系有200名学生,在极端情况下,这200名学生所对应的数据元组分布在200个不同的物理块上。尽管对学生关系已按所在系建有索引,由索引会很快找到计算机系学生的元组标识,避免了全表扫描。然而再由元组标识去访问数据块时就要存取200个物理块,执行200次I/O操作。如果将同一系的学生元组集中存储,则每读一个物理块就可得到多个满足查询条件的元组,从而可以显著地减少访问磁盘的次数。聚簇功能不但适用于单个关系,而且适用于经常进行连接操作的多个关系。即把多个连接关系的元组按连接属性值聚集存储,聚集中的连接属性称为聚簇码。这就相当于把多个关系按“预连接”的形式存储,从而大大提高连接操作的效率。
(2)建立聚簇的基本原则
一个数据库可以建立多个聚簇,但一个关系只能加入一个聚簇。选择聚簇存取方法就是确定需要建立多少个聚簇,确定每个聚簇中包括哪些关系。聚簇设计时可分两步进行:先根据规则确定候选聚簇,再从候选聚簇中去除不必要的关系。
设计候选聚簇的原则如下。
1)对经常在一起进行连接操作的关系可以建立聚簇。
2)如果一个关系的一组属性经常出现在相等、比较条件中,则该单个关系可建立聚簇。
3)如果一个关系的一个(或一组)属性上的值重复率很高,则此单个关系可建立聚簇。也就是说对应每个聚簇码值的平均元组不能太少,太少了,聚簇的效果不明显。
4)如果关系的主要应用是通过聚簇码进行访问或连接,而其他属性访问关系的操作很少时,可以使用聚簇。尤其当SQL语句中包含有与聚簇有关的ORDER BY,GROUP BY,UNION,DISTINCT等子句或短语时,使用聚簇特别有利,可以省去对结果集的排序操作。反之,当关系较少且利用聚簇码操作时,最好不要使用聚簇。
检查候选聚簇,取消其中不必要关系的方法如下。
1)从聚簇中删除经常进行全表扫描的关系。
2)从聚簇中删除更新操作远多于连接操作的关系。
3)不同的聚簇中可能包含相同的关系,一个关系可以在某一个聚簇中,但不能同时加入多个聚簇。要从这多个聚簇方案(包括不建立聚簇)中选择一个较优的,其标准是在这个聚簇上运行各种事物的总代价最小。
(3)建立聚簇应注意的问题
建立聚簇时,应注意以下3个问题。
1)聚簇虽然提高了某些应用的性能,但是建立与维护聚簇的开销是相当大的。
2)对已有的关系建立聚簇,将导致关系中的元组移动其物理存储位置,这样会使关系上原有的索引无效,要想使用原索引就必须重建原有索引。
3)当一个元组的聚簇码值改变时,该元组的存储位置也要做相应移动,所以聚簇码值应当相对稳定,以减少修改聚簇码值所引起的维护开销。
3.5.3 确定数据库的存储结构
确定数据的存储位置和存储结构要综合考虑存取时间、存储空间利用率和维护代价3个方面的因素。这3个方面常常相互矛盾,需要进行权衡,选择一个折中方案。
1.确定数据的存储位置
为了提高系统性能,应根据应用情况将数据的易变部分与稳定部分、经常存取部分和存取频率较低部分分开存储。有多个软盘的计算机,可以采用下面几种存取位置的分配方案。
1)将表和索引放在不同的软盘上,这样在查询时,由于两个软盘驱动器并行工作,可以提高物理I/O读写的效率。
2)将比较大的表分别放在两个软盘上,以加快存取速度,这在多用户环境下特别有效。
3)将日志文件、备份文件与数据库对象(表、索引等)放在不同的软盘上,以改进系统的性能。
4)对于经常存取或存取时间要求高的对象(如表、索引)应放在高速存储器(如硬盘)上,对于存取频率小或存取时间要求低的对象(如数据库的数据备份和日志文件备份等只在故障恢复时才使用),如果数据量很大,可以存储在低速存储设备上。
由于各个系统所能提供的对数据进行物理安排的手段、方法差异很大,因此设计人员应仔细了解给定的DMBS提供的方法和参数,针对具体应用环境的要求,对数据进行适当的物理安排。
2.确定系统配置
DBMS产品一般都提供了一些系统配置变量和存储分配参数供设计人员和DBA对数据库物理结构进行优化。在初始情况下,系统都为这些变量赋予了合理的默认值。但是这些默认值不一定适合每一种应用环境。在进行数据库的物理结构设计时,还需要重新对这些变量赋值,以改善系统的性能。
系统配置变量很多。例如,同时使用数据库的用户数、同时打开的数据库对象数、内存分配参数、缓冲区分配参数(使用的缓冲区长度、个数)、存储分配参数、物理块的大小、物理块装填因子、时间片大小、数据库的大小和锁的数目等,这些参数值影响存取时间和存储空间的分配。物理结构设计时需要根据应用环境确定这些参数值,以使系统性能最佳。
物理结构设计时对系统配置变量的调整只是初步的,在系统运行时还要根据实际运行情况做进一步的参数调整,以改进系统性能。
3.评价物理结构
物理结构设计过程中需要对时间效率、空间效率、维护代价和各种用户要求进行权衡,其结果可能会产生多种设计方案。数据库设计人员必须对这些方案进行详细的评价,从中选择一个较优的方案作为数据库的物理结构。评价数据库物理结构的方法完全依赖于所选用的DBMS,主要是从定量估算各种方案的存储空间、存取时间和维护代价入手,对估算结果进行权衡和比较,选择出一个较优的、合理的物理结构。如果该物理结构不符合用户需求,则需要修改设计。