分类:
2008-04-13 14:59:45
来源:中国站长站 作者:hpoaue |
表空间
数据库管理的一个重要部份包括通过使用表空间来完成逻辑数据库设计到物理存储的映射。 DB2 UDB 使用二种类型表空间: 系统管理表空间(SMS) 和数据库管理表空间(DMS)。使用SMS 表空间,操作系统的文件管理器负责分配和处理表空间使用存储空间。 使用DMS表空间,表空间创建器(或者,在某些情况下是DB2 数据库管理器) 负责分配空间, DB2 数据库管理器负责管理。性能通常是以DMS 表空间来获得快速的相应。 但是,SMS 表空间没有大小限制(16,777,215 页) ,在这点上不同于DMS 表空间。 SMS 表空间还更加容易管理,在许多情况下,因为在需要时系统可以自动地获取额外的存储空间。通常DMS 表空间被用于那些频繁地的表,但增长很慢。SMS 表空间一般被用于那些连续增长的表。
早些时候,我提及过数据是在表空间存储容器之间传送(譬如文件系统目录、文件和裸设备)并且缓冲池是被称之为页的一些分离块组成。DB2 UDB 提供四不同页面大小(4KB 、8KB 、16KB ,和32KB) 。缺省情况下在数据库创建过程期间产生的三个表空间(SYSCATSPACE, USERSPACE1和 TEMPSPACE1) 被分配4KB 页面大小。各个表空间必须与缓冲区结合;一个特殊表空间所使用页面大小必须与它关联的缓冲区的页面大小相匹配。 另外,如果你创建可一个页面大小是4KB之外的一个表空间,你应该创建一个使用同样页面大小的系统临时表空间。否则,在执行一个需要临时表空间的操作时性能可能会降低(譬如排序和表重组)。
当表空间横跨多个容器时,数据将会用round-robin方式写入每个容器。所谓扩展长度的属性是控制当数据要写入列表中下一个容器之前在一个容器中写多少页数据。这种方法有助于对属于所给定表空间的所有容器之间的数据平衡。
为了减少查询的相应时间,DB2数据库管理器使用了一种被称之为prefetching的技术去检索(或取得)那些数据库管理器确定用户可能需要在实际执行之前的数据。(数据与需要的实际页一起被复制到缓冲区;表空间的prefetch 大小将决定在响应一个查询时有多少额外的数据页被复制到缓冲池里。)
缺省的,所有表空间被创建成extent和prefetch均为32页的大小。你通常可以通过超过这个缺省的extent和prefetch大小来改进整体性能。以下二个算式将确定适当的extent大小:
Min Extent Size = [Number of physical disks used by the tablespace * 4096 (bytes)] / Tablespace Page Size (in bytes)
Max Extent Size = 524288 (bytes) / Tablespace Page Size (in bytes)
(如果你感觉象你以前从未看了这些等式或者是我提供的prefetch的大小,这都是正常的现象。因为我没有在任何IBM 指南或文献中发现它们。相反的,这些是我作为DB2 UDB 性能组的成员在多伦多IBM 实验室工作期间研究出来的结果。)
最合适的extent大小应该是计算出来的最小值与最大值中间某处的值。切记,对于extent的大小,更多不一定意味着更好。在理想状态下,你在从最小值向最大值过渡的过程中会发现一个合适的extent大小,运行性能测试和评估每次设置的结果。注意,extent大小在表空间创建以后无法修改, 所以,在每次测试的时候表空间将必须删除,再创建并且重新计算。
一旦你决定了extent的大小,你就可以通过下面的方程来得到prefetch 大小:
Min Prefetch Size = (Extent Size * Number of Containers Used) * Factor
Factor是一个常量,一般为3。
对于prefetch大小,与extent不同的是它在通常状况下比较好。
分离数据
仔细查看在一个DB2UDB数据库里面大多数数据是如何存放你就会发现这里有三种不同的对象:常规用户数据存储为数据对象;索引数据联系了在表中定义了的索引信息存储为索引对象;长字段数据被存储成一个长字段对象 (长字段对象只存在于表包含一个或多个长数据列中——LONG VARCHAR, LONG VARGRAPHIC, BLOB, CLOB, DBCLOB) 。如果采用DMS类型的标空间,这些对象分开地被存放并且每个都被存放在它自己的单独表空间里面。在缺省情况下,这三个对象都被存放在同一个表空间里; 但是,性能可能通过将数据分别存放在上述三种类型的表空间中存放时常得到改善。
关于db2empfa
在SMS 表空间,文件系统(而不是DB2 数据库管理器)负责在需要时分配额外的存储空间。并且在缺省情况下,SMS 表空间每次扩展一页。但是,在某些工作负荷下(例如,当进行一次大批量的插入操作)它也许倾向于使用在extent中分配的存储空间而不是页。这就是db2empfa工具起了作用。 当db2empfa运行的时候, 数据库配置参数multipage_alloc被设置位YES(虽然它是一个只读配置参数),它会导致 DB2 UDB 每次扩展SMS 表空间一个extent而不是一页。db2empfa工具在DB2安装路径下的SQLLIB/Bin目录里面。 |