关键的数据库对象包括:实例、数据库、节点组、表、视图、索引、模式、系统目录表。图1显示了一些数据库对象之间的关系。它也显示了表、索引和长整型数据存储在表空间中的情况。
图1.一些数据库对象之间的关系
实例(有时称为数据库管理程序)是管理数据的DB2代码。它控制可对数据执行的操作,并管理分配给它的系统资源。每一个实例都是一个完整的环境。一个实例有它自己的数据库(其他的实例不能存取它)。它还有独立的安全性,不受同一机器(系统)上其他实例的影响。
关系数据库将数据表示成表的集合。表由数目已定的列和任意数目的行组成。每个数据库都包括一组描述数据的逻辑和物理结构的系统目录表,一个包含为该数据库分配的参数值的配置文件以及一个带有正在进行的事务和可归档事务的恢复日志。
节点组是一个或多个数据库分区组成的集合。当您想为数据库创建表时,首先创建节点组以存储表空间,然后创建表空间以存储表。
关系数据库将数据表示成表的集合。表由逻辑排列的行和列数据组成。所有数据库的表数据都被存储在表空间中。
视图是高效率的数据呈现方法(无需维护数据)。视图不是实际的表,不需要永久性存储器。创建并使用一个“虚拟表”。
视图可以包括它所基于的表中的所有或某些列或行。例如,可以在视图中连接一个部门表和一个员工表,以便可以列出特定部门中的所有雇员。图2显示了表和视图的关系。
索引是一组关键字,其每一个都指向一些行。例如,图3中,表A的一个索引基于表中的员工号码。此关键字提供指向表行的指针:员工号码19指向员工KMP。通过使用指针创建指向数据的直接路径,索引是更有效的存取表行成为可能。
SQL优化器自动选择最有效率的存取表中数据的方法。当确定最快速的数据存取路径时,优化器会将索引考虑在内。
可创建唯一索引以确保索引关键字的唯一性。索引关键字是定义了索引的一个列或一些列的有序集合。使用唯一索引将确保在编入的索引的列中,每个索引关键字的值都是唯一的。图3显示了索引与表之间的关系。
图2.表和视图之间的关系
图3.索引与表之间的关系
模式是一个标识符,如用户ID,它帮助分组表和其他数据库对象。模式可以归个人拥有,拥有者可以控制对数据以及其中的对象的存取。
模式也可以是数据库中的对象。它可以在创建模式中的第一个对象时自动创建。这样的对象可以是任何可以由模式名限定的对象,如表、索引、视图、程序包、单值类型、函数或触发器。
每个数据库都包括一组描述数据的逻辑和物理结构的系统目录表。DB2为每个数据库维护一大组系统目录表。这些表包含有关数据库对象(例如,用户表、视图和索引)的定义信息,以及用户对这些对象所拥有的权限的安全性信息。它们在数据库创建时被创建,并在常规操作期间得到更新。不能显示的创建或卸载下它们,但是可以使用目录视图查询和查看它们的内容。
下列数据库对象用来定义在系统上存储数据的方式以及改进(与存取数据相关的)性能的方法:表空间、容器和缓冲池。
数据库由称为表空间的部件组成。表空间是用来存储表的位置。当创建表时,您可以决定将特定对象(如索引和大对象)数据与其余表数据分开存放。表空间也可以分布在一个或多个物理存储设备上。图4显示了在表空间之间分布数据时具有的一些灵活性。
图4.表空间
将容器分配给表空间。容器是分配的物理存储器(如文件和设备)。
表空间可以使系统管理空间(SMS)或数据库管理空间(DMS)。对于SMS表空间,每个容器都是操作系统的文件空间中的一个目录,由操作系统的文件管理器控制存储空间。对于DMS表空间,每个容器或者是固定大小的预分配文件,或者是物理设备如磁盘,由数据库管理程序控制存储空间。
表空间有三种类型:规则、临时和长整数。
包含用户数据的表存放在规则表空间中。缺省用户表空间名为USERSPACE1。索引也存储在规则表空间中。系统目录表存放在规则表空间中。缺省系统目录表空间名为SYSCATSAPCE。
包含长整数字段数据或长整数对象数据(如多媒体对象)的表存放在长整数表空间中。
临时表空间分为系统临时表空间或用户临时表空间。系统临时表空间用来存储SQL操作(如排序、重组表、创建索引和连接表)期间所需的内部临时数据。虽然可以创建任意数目个系统临时表空间,但建议您只适用大多数表所使用的页大小创建一个。缺省系统临时表空间名为TEMPSPACE1。用户临时表空间用来存储已说明全局临时表(已说明全局临时表存储的是应用程序临时数据)。用户临时表空间不是在数据库创建时缺省创建的。
容器是物理存储设备。它可以由目录名、设备名或文件名标识。
将为表空间分配容器。单个表空间可以横跨多个容器,但每个容器只能属于一个表空间。
图5举例说明了表与数据库中的表空间、相关联的容器和磁盘之间的关系。
图5.表空间、相关联的容器和磁盘之间的关系
EMPLOYEE、DEPARTMENT和PROJECT表在HUMANRES表空间中,该表空间横跨容器0、1、2、3和4。此示例显示每个容器存在于不同的磁盘上。
任何表的数据都以循环方式存储在表空间中的所有容器中。这能在属于给定表空间容器之间平衡数据。数据库管理程序在使用另一个容器之前写入一个容器的页数称为数据块大小。
缓冲池指的是从磁盘读去高速缓存表和索引数据页时或修改它们时分配给它们的主存储器。缓冲池的目的是改进系统性能。从内存存取数据要比从磁盘存取数据快的多;因此,数据库管理程序需要读写(I/O)的次数越少,性能也越好。(可以创建多个缓冲池,虽然在大多数情况下只需要一个。)
因为可以缩短慢速I/O所造成的延迟,所以缓冲池的配置是最重要的调整项目。