`

DB2表空间理论基础(原创)

 
阅读更多

在DB2 V9版本中表空间的管理方式有系统管理表空间(SMS),数据库管理表空间(DMS)和自动存储管理,下面就以表空间的管理方式来介绍DB2的表空间

系统管理空间概述
在SMS(系统管理空间)表空间中,操作系统的文件系统管理器分配和管理用于存储表的空间。该存储模型通常由存储在文件系统空间中的多个文件组成,这些文件表示表对象。用户决定文件的位置、DB2 数据库 Linux 版、UNIX 版和 Windows 版控制它们的名称,而文件系统负责管理它们。通过控制写入每个文件的数据量,数据库管理器均匀地将数据分布到所有表空间容器中。
每个表至少有一个与它相关的 SMS 物理文件。
表空间中的数据按系统中所有容器上的扩展数据块进行条带分割。扩展数据块是对数据库定义的一组连续页。文件扩展名表示该文件中存储的数据的类型。为了在表空间中的所有容器上平均分布数据,表的起始扩展数据块以循环方式分布在所有容器上。如果数据库中包含许多容量较小的表,那么这种扩展数据块分布特别重要。将数据写入多个容器时,建议执行 DB2 条带分割。
在 SMS 表空间中,表的空间大小是按需分配的。分配的空间量取决于multipage_alloc数据库配置参数的设置。如果将此配置参数设置为YES,那么需要空间时将分配完整的扩展数据块(通常包含两页或更多页)。否则,一次分配的空间将为一页。
缺省情况下,启用了多页文件分配功能。multipage_alloc 数据库配置参数值将指示是否已启用多页文件分配功能。
注: 多页文件分配功能不适用于临时表空间。多页文件分配将只影响一个表的数据和索引部分。这意味着 .LF、.LB 和 .LBA 文件并不会一次扩展一个扩展数据块。
系统管理空间设计
SMS 表空间是使用 CREATE DATABASE 命令上或 CREATE TABLESPACE 语句上的 MANAGED BY SYSTEM 选项定义的。当设计SMS表空间时,必须考虑两个关键要素:

表空间的容器:必须指定要用于表空间的容器数。标识要使用的所有容器是非常重要的,因为您不能在创建了 SMS 表空间之后添加或删除容器。当将单个容器中的所有空间都分配给表时,就认为该表空间“已满”,即使其他容器中还有剩余空间。仅当数据库分区中没有任何容器时,才能向该数据库分区中的 SMS 表空间添加容器。在分区数据库环境中,在将新数据库分区添加至 SMS 表空间的数据库分区组时,可以使用 ALTER TABLESPACE 语句将容器添加至新的数据库分区。
用于一个 SMS 表空间的每个容器都标识一个绝对或相对目录名。其中每一个目录都可以位于不同的文件系统(物理磁盘)上。表空间的最大大小可以按以下方法估计:
容器数 * (操作系统支持的最大文件系统大小)
此公式假定有一个唯一的文件系统映射至每个容器,且每个文件系统都具有最大量的可用空间。实际上,情况可能不是这样,表空间最大大小可能小得多。对于数据库对象的大小也有 SQL 限制,它可能影响表空间的最大大小。
注: 定义容器时必须很小心。如果容器上已有文件或目录,将返回一个错误(SQL0298N)。
表空间的扩展数据块大小
扩展数据块大小只能在创建表空间时指定。因为以后不能更改它,因此为扩展数据块大小选择一个适当的值就很重要。
创建表空间时,如果不指定扩展数据块大小,数据库管理器将使用缺省扩展数据块大小来创建表空间,该缺省大小由 dft_extent_sz数据库配置参数定义。此配置参数最初是根据创建该数据库时提供的信息设置的。如果未在CREATE DATABASE命令上指定 dft_extent_sz 参数,那么会将缺省扩展数据块大小设置为32。
要为表空间的容器数和扩展数据块大小选择适当的值,必须了解:
操作系统对逻辑文件系统的大小施加的限制。
例如,某些操作系统有 2GB 的限制。因此,如果想要一个 64GB 的表对象,那么在此类型的系统上将需要至少32个容器。
当创建该表空间时,可以指定位于不同文件系统上的容器,以便增加可以存储在该数据库中的数据量。

在创建表空间时,DB2为该表空间指定的第一个容器中创建第一个表数据文件(SQL00001.DAT),并允许此文件增大至该扩展数据块大小。当它达到此大小之后,数据库管理器将数据写入下一个容器中的 SQL00001.DAT。此过程会继续,直到所有容器都包含 SQL00001.DAT 文件为止,在那时,数据库管理器会返回至第一个容器。此过程(称为条带分割)会继续在容器目录中运行,直到一个容器装满为止(SQL0289N)或操作系 统中不再有空间可分配为止(磁盘已满错误)。条带分割也用于索引(SQLnnnnn.INX)、长型字段(SQLnnnnn.LF)、 LOB(SQLnnnnn.LB 和 SQLnnnnn.LBA)以及XML(SQLnnnnn.XDA)文件。
注: 只要任何一个容器已满,SMS 表空间就满了。因此,每个容器具有相同容量的可用空间是很重要的。
为了有助于将数据更加均匀地分布至这些容器中,数据库管理器根据将表标识(以上示例中为 SQL00001.DAT)除以容器数所得的余数来确定首先使用的容器。容器从 0 开始依次编号。

根据DB2对容器进行循环写入的原则,如果您选择实现磁盘条带分割以及DB2条带分割,那么表空间的扩展数据块大小和磁盘的分割大小应该相同,这样会使性能更加优化。

下面以目前常见的RAID5为例来加以说明
在配置RAID时,可以通过存储管理软件指定每块盘的条带(叫做Segment或Strip)。设置了每块盘的条带大小后,就可以计算出一个RAID的条 带大小:RAID Strip=Strip*n(Disks)。DB2找表空间的各个容器循环写数据时,是按照Extent大小,当第一个容器写完一个Extent后,到第二个容器继续写,以此类推。如果Extent块大小和RAID条带大小匹配的话,在写数据时只需一次IO就可写到存储,这样性能比较优化。例如:一个包含4d+1p的RAID5阵列,每块磁盘的条带未128kb,则RAID Strip=128KB×4=512KB。如果表空间页大小是16KB,那么可以设置Extent Size=RAID Strip=512KB=512KB/16KB=32页。这样可以在创建表空间时指定Extent的大小,
EXTENTSIZE的默认大小由db cfg中的DFT_EXTENT_SZ决定,该值是在创建DB时候设置的,这个值有效值是2-256。该原则同样适用于DMS表空间
与优化相关的另一个表空间属性为预取大小(Prefetch size)
Prefetch size 指定当执行数据预取时将从表空间读取的页数。预取操作在查询引用所需的数据之前读入这些数据,这样一来查询就不必等待执行I/O了。当数据库管理器确定顺序I/O是适当的,并且确定预取操作可能有助于提高性能时,它就选择预取操作。可以理解为后台任务不停地异步读取数据,尽量使得应用程序在读取数据时发现数据已经存在缓冲区内存中,以提高性能。
预取的单位是数据页。由于DB2中每个数据对象分配数据的单位为数据块,因此预取的大小最好设置为数据块大小的整倍数。一般来说,采用如下公式计算预取大小
Prefetch size=extent size ×(#of containers)×(#of disk per container)
其中
extent size代表数据块大小, #of containers代表容器个数, #of disk per container代表每个容器中磁盘的个数,当然DB2自身无法知道容器中的磁盘个数,需要手工设置注册表变量 DB2_PARALLEL_IO参数来满足要求,该参数默认值为6。DB2_PARALLEL_IO设置方式为DB2_PARALLEL_IO=*:x,y:z,其中*:x表示所有表空间的容器中磁盘数量为x个,y:z表示标示为y的表空间每个容器中磁盘数量为z,y:z的优先级大于*:x。设置完毕后需要重启实例使其生效。
然而,对于extent和prefetch size的大小,如果extent的大小等于一个Raid条带的话,这时可以把整个Raid想象成一个盘,那么DB2_PARALLEL_IO不需要设置。如果extent的大小设置为Raid中一个磁盘的条带大小,那么可设置
DB2_PARALLEL_IO等于该阵列中磁盘的个数。
推荐做法是将块大小设置Raid条带大小,而不设置
DB2_PARALLEL_IO。

数据库管理表空间

在 DMS(数据库管理空间)表空间中,数据库管理器控制存储空间。存储模型由有限数目的设备或文件组成,这些设备或文件的空间由 DB2 数据库 Linux 版、UNIX 版和 Windows 版来管理。数据库管理员决定使用哪些设备和文件,而 DB2® 管理这些设备和文件上的空间。这种表空间实质上实现了一种特殊用途的文件系统,用于最好地满足数据库管理器的需要。
DMS 表空间与 SMS 表空间之间的差异在于,对于 DMS 表空间,空间是在创建表空间时分配的。对于 SMS 表空间,空间是根据需要分配的。包含用户定义的表和数据的 DMS 表空间可以定义为存储任何表数据或索引数据的常规表空间或大型表空间。
在设计 DMS 表空间和容器时,应该考虑下列事项:

常规表空间最多可包含 16384 个页,因此选择较大的页大小可以增加表空间的容量,详见下表

页大小 行大小限制 列数限制 最大容量
4 KB 4005 500 64 GB
8 KB 8101 1012 128 GB
16 KB 16293 1012 256 GB
32 KB 32677 1012 512 GB

而大型表空间的最大大小是 16TB,大型表空间只被DMS支持。
与 SMS 表空间不同,组成一个 DMS 表空间的容器不必大小相同;然而,通常不建议这样做,因为会导致在容器间不均匀地进行条带分割,并会降低性能。若任何容器已满,DMS 表空间会使用其他容器中的可用空间。
因为空间是预分配的,所以在能够创建表空间之前,该空间必须是可用的。当使用设备容器时,该设备也必须有足够的空间以便存储容器定义。每个设备上只能定义一个容器。为避免浪费空间,设备的大小应该等于容器的大小。例如,如果分配给该设备 5000 页,而将设备容器定义为分配 3000 页,那么设备上的 2000 页将是不可用的。
在缺省情况下,每个容器中都保留一个扩展数据块作为开销。只使用整个扩展数据块,因此为了对空间进行最优管理,可以使用如下公式来帮助您确定当分配容器时要使用的适当大小:
extent_size * (n + 1)
其中,extent_size 是表空间中每个扩展数据块的大小,而n是您要在该容器中存储的扩展数据块数目。
DMS 表空间的最小大小是五个扩展数据块。试图创建小于五个扩展数据块的表空间将产生错误(SQL1422N)。
表空间中有三个扩展数据块是保留给开销使用的。
要存储任何用户表数据,至少需要两个扩展数据块。(这些扩展数据块是一个表的规则数据所必需的,但不是任何索引、长型字段或大对象数据所需的,它们需要自己的扩展数据块。)
设备容器必须使用带“字符型特殊接口”的逻辑卷,而不是物理卷。

注:虽然很多资料上都声称裸设备性能好,但随着CIO/DIO的发展,文件类型的性能与裸设备计划相差无几,而且文件类型逼裸设备管理起来方便很多,因此在DMS表空间中建议使用文件类型来代替裸设备

如果工作负载涉及到 LOB 或 LONG VARCHAR 数据,那么可通过文件系统高速缓存改进性能。
注: 数据库管理器的缓冲池不缓冲LOB和LONG VARCHAR。 与 SMS 表空间相似,DMS 文件容器可以利用文件系统预取和高速缓存。但是,使用原始设备容器的DMS表空间却不能。
某些操作系统允许拥有大小超过 2GB 的物理设备。应该考虑将物理设备划分为多个逻辑设备,以使任何容器都不超过操作系统允许的大小。
这一关于页在存储器中的连续放置的一般性陈述有一个例外。当使用DMS表空间时,有两个容器选项:原始设备和文件。当使用文件容器时,数据库管理器在创建表空间时分配整个容器。这种一开始就分配整个表空间的结果是,即使由文件系统执行分配,物理分配也通常(但不保证)是连续的。当使用原始设备容器时,数据库管理器控制整个设备,并始终确保扩展数据块中的页是连续的。
当使用 DMS 表空间时,您应考虑将每个容器与不同的磁盘相关联。这使表空间容量可以更大,并且能够利用并行 I/O 操作。
CREATE TABLESPACE 语句在数据库中创建新的表空间,向表空间分配容器,并在目录中记录表空间定义和属性。当创建表空间时,扩展数据块大小被定义为许多连续页。扩展数据块是表空间中的空间分配单位。只有一个表或对象(例如,索引)能够使用任何一个扩展数据块中的页。将逻辑表空间地址映射中的扩展数据块分配给表空间中创建的所有对象。扩展数据块分配通过“空间映射页”(SMP)进行管理。
逻辑表空间地址映射中的第一个扩展数据块是包含内部控制信息的表空间的头部。第二个扩展数据块是表空间的“空间映射页”(SMP)的第一个扩展数据块。SMP 扩展数据块以固定间隔方式分布在表空间中。每个 SMP 扩展数据块都是当前 SMP 扩展数据块到下一 SMP 扩展数据块的扩展数据块位映射。位映射用来跟踪正在使用哪些中间扩展数据块。
SMP 后面的一个扩展数据块是表空间的对象表。对象表是一个内部表,它跟踪表空间中存在哪些用户对象,以及它们的第一个“扩展数据块映像页”(EMP)扩展数据块的位置。每个对象都有其自己的 EMP,它提供了指向该对象的每一页的映射,这些映射存储在逻辑表空间地址映射中。下图说明了如何在逻辑表空间地址映射中分配扩展数据块。

               

自动存储表空间

在 DB2 V9 中,自动存储已经变为数据库的默认选项,数据库在创建时会默认启用自动存储,除非显式的改变该选项.自动存储在保持了性能的同时大大的简化了 DBA 的工作,DBA 可以在数据库级别管理表空间的存储,表空间容器选择分配等工作由数据库管理器自动完成。自动存储看起来是一种不同类型的表空间,但实际上是 DMS 和 SMS 的扩展.因为数据库管理的空间 DMS 需要比较多的维护,在 DB2 V8.2.2 中引入了 DMS 自动存储,以简化表空间管理.这种类型的表空间既保持了 DMS 的高性能又具有 SMS 表空间易于管理的特点,可以大大简化 DBA 的管理工作.自动存储需要首先在数据库级别启用,在 DB2 V9 以后,自动存储已经成为了 DB2 的默认设置,在建立数据库时,DBA 可以提供一组路径,在建立表空间时,数据库管理器会在这些提供的路径中建立需要的容器,容器的大小根据情况由数据库管理器负责分配和管理.相比 DMS 而言,自动存储表空间在容器管理方面十分简便,可以满足大多数表空间的使用需求.
借助自动存储器表空间,数据库管理器将根据需要自动创建和扩展容器,直到达到与数据库相关联的存储器路径所确定的限制为止。

如果对数据库启用自动存储器,那么除非您另有指定,否则您创建的任何表空间也将作为自动存储器表空间被管理。有了自动存储器表 空间,您就不需要提供容器定义;数据库管理器将负责创建和扩展容器,以便利用分配给数据库的存储器。如果对数据库添加了存储器,那么当现有容器达到它们的 最大容量时,将自动创建新容器。如果您希望立即使用新添加的存储器,那么可以对表空间进行重新平衡,从而在扩充后的这组新容器和分割集之间重新分配数据。 或者,如果您不怎么关心 I/O 并行性,而只希望对表空间添加容量,那么可以提前进行重新平衡;在这种情况下,当需要新的存储器时,将创建新分割集。
DB2表空间的不同用途
目录表空间
每个数据库只有一个目录表空间,它是在发出 CREATE DATABASE 命令时创建的。目录表空间被 DB2 命名为 SYSCATSPACE,它保存了系统目录表。总是在创建数据库时创建该表空间。
常规表空间
常规表空间保存表数据和索引。它还可以保存诸如大对象(Large Object,LOB)之类的长数据,除非这些数据显式地存储在长表空间中。如果某些表空间是数据库管理的空间(Database Managed Space,DMS),则可以将表及其索引分别放到单独的常规表空间中。我们将在本文后面定义 DMS 和系统管理的空间(System Managed Space,SMS)之间的区别。每个数据库中必须至少有一个常规表空间。创建数据库时指定该表空间的缺省名为 USERSPACE1。
长表空间
长表空间用于存储长型或 LOB 表列,它们必须驻留在 DMS 表空间中。它们还可以存储结构化类型的列或索引数据。如果没有定义长表空间,那么将把 LOB 存储在常规表空间中。长表空间是可选的,缺省情况下一个都不创建。
系统临时表空间
系统临时表空间用于存储 SQL 操作(比如排序、重组表、创建索引和连接表)期间所需的内部临时数据。每个数据库必须至少有一个系统临时表空间。随数据库创建的系统临时表空间的缺省名为 TEMPSPACE1。
用户临时表空间
用户临时表空间存储已声明的全局临时表。创建数据库时不存在用户临时表空间。至少应当创建一个用户临时表空间以允许定义已声明的临时表。用户临时表空间是可选的,缺省情况下一个都不创建。


参考至:http://www.shentongdata.com/szgdata/commService.do?method=getOneData&id=40

               http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=%2Fcom.ibm.db2.luw.admin.dbobj.doc%2Fdoc%2Fc0054960.html&resultof=%22%E8%A1%A8%E7%A9%BA%E9%97%B4%E5%9B%BE%22

               http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=%2Fcom.ibm.db2.luw.admin.dbobj.doc%2Fdoc%2Fc0008085.html

               http://www.ibm.com/developerworks/cn/data/library/techarticles/0212wieser/0212wieser.html
               http://book.51cto.com/art/200906/129071.htm

本文原创,转载请注明出处、作者

如有错误,欢迎指正

邮箱:czmcj@163.com

1
0
分享到:
评论

相关推荐

    db2表空间不足及处理.doc

    DB2表空间不足及处理 DB2表空间是数据库管理系统中用于存储数据的基本结构单元。DB2表空间不足可能会导致数据库性能下降,甚至崩溃。因此, DB2表空间的检查和处理是数据库管理员的重要任务之一。 一、DB2表空间的...

    db2表空间不足及处理

    "DB2表空间不足及处理" DB2表空间不足是指数据库中可用空间不足,以致影响数据库的正常运行。在本文中,我们将介绍如何检查DB2表空间是否不足,以及如何处理这种情况。 什么是DB2表空间? 在DB2中,表空间是指...

    DB2表和表空间状态详解

    ### DB2表和表空间状态详解 #### 引言 IBM DB2 Universal Database(DB2 UDB)作为一款先进的数据库管理系统,提供了丰富的功能以确保数据的完整性和安全性。其中一个关键特性便是通过表和表空间的状态控制,实现...

    DB2表空间管理

    ### DB2表空间管理 在DB2数据库管理系统中,表空间是存储数据的基本单位。根据管理方式的不同,DB2中的表空间主要分为两种类型:系统管理空间(System Management Space, SMS)与数据库管理空间(Database Management ...

    db2表空间详解

    ### DB2表空间详解 #### 一、表空间概述 在DB2中,表空间是连接物理存储设备与逻辑对象(如表)的关键组件,它为数据库中的数据提供存储环境。表空间的设计与管理对数据库性能有着直接的影响,合理规划表空间能够...

    db2裸设备扩容表空间

    本篇文章将详细介绍如何在AIX操作系统上对DB2的裸设备进行扩容,以及涉及的表空间扩展过程。 首先,我们需要理解表空间在DB2中的作用。表空间是DB2数据库中逻辑存储的容器,用于组织和管理数据库对象如表、索引等。...

    IBM DB2 表空间与缓冲池

    IBM DB2 表空间与缓冲池IBM DB2 表空间与缓冲池IBM DB2 表空间与缓冲池IBM DB2 表空间与缓冲池IBM DB2 表空间与缓冲池

    DB2表空间检查与调优.pdf

    ### DB2表空间检查与调优 #### 一、引言 在许多现代的应用系统中,数据存储成为了关键的一部分,而数据库的选择对于整个系统的稳定性和性能有着决定性的影响。DB2作为IBM公司的一款关系型数据库管理系统,因其强大...

    DB2不允许访问表空间

    ### DB2 不允许访问表空间问题解析 #### 一、问题背景及现象 在使用IBM DB2数据库管理系统的过程中,有时可能会遇到无法访问特定表空间的情况。这种情况下,用户可能能够执行SELECT查询,但无法进行UPDATE、ALTER...

    DB2的表空间 DB2的表空间

    DB2的表空间 DB2的表空间 DB2的表空间 DB2的表空间

    如何降低DB2的管理表空间的高水位标记

    对于DB2数据库管理(DMS)表空间的高水位标记(HWM)是指该表空间曾经使用到的最大数据页数。如果使用:db2 list tablespaces show detail,看到某个DMS表空间的已用页数低于高水位标记,则有可能通过如下方法降低高...

    DB2基础----表空间

    在DB2中,表空间(Tablespace)是数据存储的基本单位,它将物理磁盘上的存储资源组织起来,为数据库对象(如表、索引等)提供逻辑存储空间。本篇文章将深入探讨DB2中的表空间概念、类型、创建以及管理方法。 一、表...

    DB2系统临时表空间过大引发的性能问题-contracted.doc

    DB2系统临时表空间过大可能引发严重的性能问题,这在实际操作中表现为SQL语句执行时间显著增加。本文以某银行的DB2数据库系统为例,深入探讨了如何诊断和解决此类问题。 首先,当遇到系统响应变慢、ACTIVE SESSION...

    DB2的表空间和缓冲池

    ### DB2的表空间和缓冲池 #### 一、表空间概述 在DB2数据库管理系统中,表空间是用于组织和存储数据的基本单位。表空间的设计与优化对提高数据库性能至关重要。按照不同的用途和管理方式,DB2中的表空间可以分为五...

    DB2表空间管理及查看脚本

    ### DB2表空间管理及查看脚本解析 #### 核心知识点概述 本文将深入解析一个专门用于管理DB2数据库中表空间的脚本。该脚本的主要功能是监测特定表空间(例如“TBS_DW_USER”)的使用情况,并在达到预定阈值时自动...

    DB2恢复删除表学习

    在IBM DB2数据库管理系统中,为了应对误删表的情况,DB2提供了表空间级别的表恢复功能。这种功能允许用户在一定条件下恢复已被删除的表及其数据。默认情况下,在创建表空间时会开启已删除表的恢复选项。然而,出于...

    DB2存储过程表空间sql专题

    DB2存储过程、表空间与SQL是数据库管理中的核心概念,尤其在企业级数据库应用中,它们的重要性不言而喻。DB2作为IBM推出的关系型数据库管理系统,广泛应用于金融、电信等关键领域。本专题旨在深入探讨DB2中存储过程...

    db2中有表损坏时最快的恢复方法db2look-move

    当遇到如DB2这样的数据库系统中的表损坏问题时,如何快速有效地恢复,成为了DBA(数据库管理员)和运维人员关注的重点。本文将详细阐述使用“db2look-move”方法进行DB2表损坏快速恢复的步骤与原理,帮助读者理解并...

Global site tag (gtag.js) - Google Analytics