数据库在实际的物理设备上的存储结构和存取方法称为数据库的物理结构。数据库物理设计是利用已确定的逻辑结构及DBMS提供的方法、技术,以较优的存储结构、数据存取路径、合理的数据存储位置及存储分配,设计出一个高效的、可实现的物理数据库结构。显然,数据库的物理设计是完全依赖于给定的硬件环境和数据库产品的。数据库物理设计过程如图2-22所示。
图2-22 数据库物理设计过程
由于不同的DBMS提供的硬件环境和存储结构、存取方法,以及提供给数据库设计者的系统参数、变化范围有所不同,因此,为了设计出一个较好的存储模式,设计者必须了解以下几方面的问题,做到心中有数。
(1)了解并熟悉应用要求,包括各个用户对应的数据视图,即数据库的外模式(子模式),分清哪些是主要的应用,了解各个应用的使用方式、数据量和处理频率等,以便对时间和空间进行平衡,并保证优先满足应用的时间要求。
(2)熟悉使用的DBMS的性能,包括DBMS的功能,提供的物理环境、存储结构、存取方法和可利用的工具。
(3)了解存放数据的外存设备的特性,如物理存储区域的划分原则,物理块的大小等有关规定及I/O特性等。
存储模式和概念模式不一样,它不是面向用户的,一般的用户不一定也不需要了解数据库存储模式的细节。所以数据库存储模式的设计可以不必考虑用户理解的方便,其设计目标主要是提高数据库的性能,其次是节省存储空间。
在进行物理设计时,设计人员可能用到的数据库产品是多种多样的。不同的数据库产品所提供的物理环境、存储结构和存取方法有很大差别,能供设计人员使用的设计变量、参数范围也大不相同,因此没有通用的物理设计方法可遵循,只能给出一般的设计内容和原则。
数据库物理设计内容包括数据存储结构的设计、集簇的设计、存取路径的设计和确定系统配置几个方面。
数据存储结构的设计就是设计存储数据的结构形式,它涉及不定长数据项的表示、数据项编码是否需要压缩和采用何种压缩、记录间互联指针的设置,以及记录是否需要分割以节省存储空间等在逻辑设计中无法考虑的问题。
由于各个系统所能提供的对数据进行物理安排的手段、方法差异很大,因此设计人员应仔细了解给定的DBMS在这方面提供了什么方法,再针对应用环境的要求,对数据进行适当的物理安排。
集簇的设计是通过把一些经常用于同一访问的记录在外存空间集中存放在一起,或存放在相邻的区域,以提高数据库的性能。在有些DBMS中,记录的存放位置由操作系统决定,DBMS无法控制,对这类DBMS在数据库的设计中也就无须加以考虑。但有些DBMS,如Oracle和SQL/DS的DBMS,提供了集簇功能,供数据库设计者控制记录的存放。
一般来讲,数据库系统是多用户共享系统,对同一数据存储要建立多条存取路径才能满足多用户的多种应用要求。物理设计的任务之一就是要利用DBMS提供的文件结构、索引技术等技术手段,选择适宜的文件结构和索引技术等使得主要应用能够对每个记录或关系进行有效的访问,即提供合适的存取路径。例如,将哪些属性列作为次码建立次索引,根据应用要求还要对哪些属性列建立组合索引,是否还需要根据数据库产品提供的功能建立其他类型的索引等。
原则上讲,索引选择可以采用穷举法,对每种可能的方案进行代价估算,从中选择最佳的方案,但实际上这是行不通的,因为:
(1)数据库中文件之间的相关性。例如,关系数据库中的连接操作涉及多个文件,在计算连接操作的代价时,往往与其他关系参与连接操作的方法有关,因而各个文件往往不能孤立地进行设计。
(2)可能出现组合爆炸问题,难以进行计算。即使对于由五个文件组成的数据库,每个文件只有五个属性的话,如果只在单个属性上建立索引,其存取结构的可能方案就有2.6×10 11 种之多。实际的数据库文件一般远不止五个,每个文件的属性也不止五个,而且有可能需要在多个属性上建立索引,这样的求解空间显然太大了。
(3)访问路径与DBMS的优化策略有关。一个事务究竟如何执行,不仅取决于数据库设计者提供的访问路径,还取决于DBMS的优化策略。若设计者所认为的事务执行方式与DBMS实际执行事务的方式不同,就会出现设计结果与实际情况有偏差的情况。
(4)代价估算比较困难。首先因为代价模型与系统有关,很难形成一套通用的代价估算公式;其次,代价估算还与数据库本身的特性有关,为了获得必需的设计参数,必须对数据进行统计分析,而在数据库设计阶段,对数据特性的了解往往是不充分的。
(5)设计目标较为复杂。鉴于上述原因,很难进行比较精确、优化的数据库物理设计。目前常用的是一种简化的设计方法,其思想和基本方法如下所述。
K.Y.Whang等人分析了各种连接方法后认为,在一定条件的限制下,某些连接方法是可分离的,换句话说参与连接的各个关系的代价可以独立地估算,对于像用嵌套循环法进行两个关系连接等不可分离的连接方法,即使按分离的方法处理,也不会引起显著的误差。因此,在进行数据库物理设计时,可以分别设计各个文件,从而避免了前面提到的组合爆炸问题,大大缩减了求解空间。K.Y.Whang等人的这一理论称为可分离理论。
按照可分离理论,根据处理要求,对记录在文件中的存放方式:有序或无序,或按某一属性(或属性组)进行集簇等,做出初步的抉择,再在运行中进行适当调整,而不必穷举各种可能,从而把问题归结为一个文件要建立哪些索引。而且经过简单分析后,可确定在有些属性上无须建立索引,当然也就不需要进行代价的分析和比较。不需要建立索引的属性有:
(1)在查询条件中不出现或很少出现的属性。
(2)属性值很少的属性。因为对于这种情况,如果在其上建立索引,则在每个索引项后面会附有大量的tid(元组标识符——由块号和记录在块中的地址组成),顺序索引集的溢出块将会很多,用索引去检索,不如直接进行顺序扫描。
建立索引的一般原则为:
(1)如果某个(或某些)属性经常作为查询条件,则考虑在这个(或这些)属性上建立索引。
(2)如果某个(或某些)属性经常作为表的连接条件,则考虑在这个(或这些)属性上建立索引。
(3)如果某个属性经常作为分组的依据列,则考虑在这个(或这些)属性上建立索引。
(4)为经常进行连接操作的表建立索引。
一个表可以建立多个索引,但只能建立一个聚簇索引。
希赛教育专家提示: 索引一般可以提高查询性能,但会降低数据的修改性能。因为在修改数据时,系统要同时对索引进行维护,使索引与数据保持一致。维护索引要占用相当多的时间,而且存放索引信息也会占用空间资源。因此在决定是否建立索引时,要权衡数据库的操作,如果查询多,并且对查询的性能要求比较高,则可以考虑多建一些索引。如果数据更改较多,并且对更改的效率要求比较高,则应该考虑少建一些索引。
许多DBMS产品都设置了系统配置变量,例如控制内存分配的参数、使用系统的用户数和其他影响系统性能的参数,供设计者和DBA对数据库进行物理优化。初始情况下,系统都为这些变量赋予了合理的默认值。但是这些值不一定适合每一种应用环境,在进行物理设计时,可以重新对这些变量赋值以改善系统的性能。
通常情况下,这些配置变量包括:同时使用数据库的用户数,同时打开的数据库对象数,使用的缓冲区长度、个数,时间片大小,数据库的大小,装填因子,锁的数目等。这些参数值会影响存取时间和存储空间的分配,在物理设计时就要根据应用环境确定这些参数值,以使系统性能最优。
评价物理结构设计完全依赖于具体的DBMS,主要考虑操作开销,即为使用户获得及时、准确的数据所需的开销和计算机的资源开销。具体可分为如下几类:
(1)查询和响应时间。响应时间是从查询开始到查询结果开始显示所经历的时间。一个设计得好的应用程序可以减少CPU时间和I/O时间。
(2)更新事务的开销。主要是修改索引、重写物理块或文件及写校验等方面的开销。
(3)生成报告的开销。主要包括索引、重组、排序和显示结果的开销。
(4)主存储空间的开销。包括程序和数据所占用的空间。一般对数据库设计者来说,可以对缓冲区做适当的控制,包括控制缓冲区个数和大小。
(5)辅助存储空间的开销。辅助存储空间分为数据块和索引块两种,设计者可以控制索引块的大小、索引块的充满度等。
实际上,数据库设计者只能对I/O服务和辅助空间进行有效控制。对于其他的方面则只能进行有限的控制或者根本不能控制。