3数据存放.docx
《3数据存放.docx》由会员分享,可在线阅读,更多相关《3数据存放.docx(41页珍藏版)》请在冰豆网上搜索。
3数据存放
上一章:
UDB的图形用户界面
第三章数据存放
第三章数据存放1
3.1容器2
3.2表空间2
3.2.1表空间与容器3
3.2.2.区段3
3.2.3表空间类型4
3.2.4系统存储管理器(SMS)表空间4
3.2.4.1默认的表空间4
3.2.4.2默认表空间的特性5
3.2.4.3什么时候应当使用SMS表空间6
3.2.5数据库管理存储器(DMS)表空间6
3.2.5.1什么时候应当使用DMS表空间7
3.2.6规划表空间环境7
3.2.7表空间的逻辑设计8
3.3创建数据库9
3.4创建表空间11
3.4.1创建表空间的例子12
3.5有关性能的考虑13
3.5.1缓冲区大小13
3.5.2区段的大小13
3.5.3NUM_IOSERVERS14
3.5.4I/O预读14
3.5.5(I/O)清理器15
3.5.6DB2中的系统编目15
3.6管理表空间18
3.6.1表空间列表命令19
3.6.2容器21
3.6.3更改表空间23
3.6.4去除表空间24
3.6.5表空间的状态24
3.6.6引导相关的状态25
能够存储和检索大量的数据是任何关系数据库系统的主要目的。
数据的物理存放(placement)可能会直接影响查询性能。
理解数据存放的概念并且创建适当的物理数据库设计是数据库管理员的职责。
DB2数据库管理系统的第二版有基于表空间(tablespaces)的十分灵活的数据存放选项。
一个DB2数据库由三个或更多个表空间组成,每个表空间都独立其它的表空间,可以独自的创建、修改和恢复。
表空间的概念提供了对服务器工作站上物理设备的更加灵活的使用。
表根据物理数据库的设计在表空间内创建。
表数据可以被包含在一个表空间里,也可以放置到多个表空间里。
表可以在预先分配的存储空间内(表空间内)被创建,也可以在填充数据需要存储空间时所分配的存储空间里创建。
我们将要讨论以下的概念:
·容器(Container)
·表空间(TableSpace)
·区段(Extent)
我们将讨论这些概念与包括表与索引等其它数据库之间的关系。
将使用命令行处理器(CLP──CommandLineProcessor)和数据库指导器(DatabaseDirector)说明表和表空间的创建与管理。
3.1容器
容器(container)是用来描述物理空间分配的一般术语。
图3.1表明容器可以是以下的任何一种类型:
目录文件设备
图3.1DB2中的各类容器
·文件
·目录
·设备
容器的类型取决于表空间和工作平台的类型。
例如,在AIX操作系统环境中,一个设备容器是一个逻辑卷。
3.2表空间
建立关系数据库的首要任务之一就是把逻辑数据库设计影射到用户系统的物理存储器中去。
用来规定数据物理位置的数据库对象就叫做表空间(tablespace)。
表空间是介入数据库与存放在表中实际数据之间的一个层次。
图3.2说明了在服务器上的DB2实例中所见到的表、表空间与数据库之间的关系。
实例被创建,然后一个叫做Database1的数据库在这个实例内被创建。
表空间被创建,然后表在数据库内被创建,如图所示。
一个表空间可以包含不止一个表。
例如,在数据库Database1的表空间Tablespace3中就创建了三个表。
有两条SQL语句可以用来创建表空间:
CREATEDATABASE
CREATETABLESPACE
存在于DB2中的表空间为用户在其数据与存储设备之间提供了一个逻辑层。
所有的DB2表都驻留在表空间中。
这意味着用户将能够控制表数据物理存放的地点。
用户可以使用不同类型的表空间去存放不同类型的数据。
这样就赋予用户创建更深入具体的物理数据库设计去适应用户特定应用环境的能力。
例如,用户能够选择速度较慢的磁盘去储存那些不经常使用的数据。
用户还可以为系统编目表(systemcatalogtables)、用户表(usertables)和临时表(temporytables)指定表空间。
可以在表空间这一级别上执行后备和恢复操作。
这就给予用户更多的粒度和控制灵活性,因为用户可以单独地后备或恢复每个表空间。
3.2.1表空间与容器
在表空间与容器之间存在一种一对多的联系。
可以为一个表空间定义多个容器。
可是也可以一个容器只能指派给一个表空间。
在图3.2中,只有一个容器(一个目录)指派给表空间tablespace3。
有两个容器指派给表空间tablespace4。
表空间tablespace4、tablespace5和tablespace6的容器都是基础设备。
在一个数据库中可以组合不同类型的容器。
用户还可以在一个空间中组合不同类型的容器。
在图3.2中,有一个表分布在tablespace4、tablespace5和tablespace6这三个表空间之上。
[注解]:
将一个表的数据跨越到多个表空间的做法,只能用DMS表空间才能实施。
3.2.2.区段
一个区段(extent)是表空间容器内的空间分区。
在DB2内数据库对象都是按页存放的(LOBs除外)。
这些页都按组存放到叫做区段(extent)的存储分区单位中。
区段的大小在表空间一级上定义。
一旦表空间定义了区段的大小,它就不能再改变。
图3.3说明了区段、容器和表空间之间的相互关系。
表空间创建时被初始化。
作为表空间初始化的一部分,表空间中区段的大小(extentsize)或存储空间分区单位的大小也被确定下来。
DB2物理页的大小是4096字节(4K),表空间区段的默认大小是32页(128KB)。
数据库1
Tablespace6
Tablespace5
Tablespace4
Tablespace3
表
表
表
表
图3.2表空间与容器之间一对多的联系
4K
容器
Tablespace3
区段=32个4k页(默认值)
图3.3DB2中的区段、容器和表空间
[注解]:
要知道,所分配的表空间是供DB2用来管理存储空间的目的,而不只是用来管理用户表
据的目的。
3.2.3表空间类型
DB2支持以下两种类型的表空间:
·系统管理存储器(SMS──SystemManagedStorage)表空间
·数据库管理存储器(DMS──DatabaseManagedStorage)表空间
在数据库中这两种类型的表空间都有。
系统管理存储器(SMS)表空间被叫做“系统管理”,因为DB2使用由操作系统所提供的文件系统设施去管理数据库对象的存放位置。
[注解]:
对于OS/2操作系统环境,它的文件系统是HPFS(HighPerformanceFileSystem──高性能
文件系统)或FAT(FileAllocationTable──文件分区表)。
[注解]:
对于WindowsNT操作系统环境,它的文件系统是HPFS(高性能文件系统)、NTFS(NT
FileSystem──NT文件系统)或FAT(文件分区表)。
[注解]:
对于AIX操作系统环境,它的文件系统是JFS(JournaledFileSystem──日志文件系统)。
AIX操作系统环境的考虑──设备类型
在AIX操作系统环境中,用户可以创建由其数据库的特殊磁盘所组成的卷组。
当使用逻辑卷作为AIX中的容器时,需要执行一些附加的任务总结如下:
1.如果用户计划为DB2专门指定一组硬设备,那么就在这些硬盘内创建一个卷组。
为此,用户不能与其它AIX逻辑卷共享这些设备。
2.创建象容器一样多的逻辑卷。
为了实现真正的I/O并行处理,最好把容器放置到不同的物理设备。
必须小心,因此如果把存储空间指派给逻辑卷,而该逻辑卷却没有指派给相应的容器,那么所分配的这些空间将被浪费掉。
3.把已经创建的的设备指派给实例的主人和小组。
这将授予对这些设备的DB2读/写访问权限。
4.要保证设备中的所有页都指派给容器,因为它们将不提供给任何其它的应用程序使用。
3.2.4系统存储管理器(SMS)表空间
系统管理存储器基于这样的存储器模型,其中的存储器是在需要时从操作系统那里获得。
在系统管理存储器(SMS)表空间中的容器有以下特性:
·在SMS表空间中的容器不预先分配它的存储空间。
在创建表空间期间分配少量
的存储空间。
·在创建表空间之后,不能把容器动态也增加到SMS表空间中去。
·SMS表空间中容器的总量应当在创建该表空间时规定。
·在操作系统中,SMS容器用目录(directories)来表示。
[注解]:
在对于表空间进行RESTORE(恢复)操作期间,可以对表空间容器布局重新定义。
这叫做定向恢复(redirectedrestore)。
3.2.4.1默认的表空间
当创建数据库时,总要创建三个表空间。
用户可以选择其特性,比如,这三个表空间的类型和大小。
如果用户在创建数据库时,没有用显式的方法规定表空间特性,那么系统将采用它们的默认值。
表空间包含以下三类对象:
·系统编目
·临时目录
·用户数据
在最初创建数据库时,将定义三个表空间。
如果用户用CREATEDATABASE命令指定某些表空间参数,那么DB2将把这些表空间创建为SMS表空间。
这些表空间的区段大小将被设置为默认值。
下面是一个CREATEDATABASE的例子。
图3.4表示如果创建数据库时选择默认值时,创建的三个默认的SMS表空间。
不管采用的是什么工作平台,第一个数据库将被放在目录SQL00001中。
目录SQL00001由指派给三个默认的SMS表空间的容器组成。
ONpath/drive
SQL00001
SQLT0000.0
SYSCATSPACE
SQLT0001.0
TEMPSPACE1
SQLT0002.0
USERSPACE1
物理结构容量逻辑结构表空间
图3.4默认数据库配置
CREATEDATABASEyourdb
这些表空间的容器有以下的目录。
1.SQL0000.0是容纳系统编目的容器。
系统编目表空间包含数据库的所有系统编目
表。
它在被创建之后,便不能被去除或更改。
这个表空间叫做SYSCATSPACE。
2.SQLT00001.0是容纳处理通常查询期间被创建或删除的临时表的容器。
这个表叫做
TEMPSPACE1。
3.SQLT0002.0是容纳用户创建表的容器。
这个表叫做USERSPACE1。
3.2.4.2默认表空间的特性
在数据库创建之后,不能去除或更改容纳系统编目的表空间(SYSCATSPACE)。
这是
系统编目的唯一表空间。
容纳临时数据和用户数据的空间在创建数据库或其它表空间之后可以被更改。
根据用户物理数据库的实际情况,临时数据或者用户数据可能有多个表空间。
[注解]:
在任何时候,都必须至少有一个临时表空间供数据库使用。
在创建数据库之后,可以去除USERSPACE1而在创建数据库之后,不能变动或改变SYSCATSPACE。
可是,在创建数据库期间,用户可以改变SYSCATSPACE的特性。
在创建数据库之后,用户能够为用户数据或临时数据增加其它表空间。
可是,在任何时刻,都只能使用一个临时表空间。
在大多数情形中,用户只能创建一个表空间。
[注解]:
大多数情形中,用户将会创建多个用户表空间,特别是在用户拥有多台设备的情况下。
3.2.4.3什么时候应当使用SMS表空间
对于用户数据使用SMS表空间有以下两个可能的优点:
1.用户系统磁盘空间总量是有限的,而用户数据库的大小是末知的。
对于SMS表不预先分配存储空间;存储空间可以要需要时(在插入或更新数据记录期间)从操作系统那里获取。
当表空间被去除时,由该表空间所使用的物理空间可以立即供其它资源使用。
2.SMS表空间的管理要比DMS表空间的管理更为简单。
用户必须预先分配空间,所以在使用每个表空间之后,不必创建容器。
3.2.5数据库管理存储器(DMS)表空间
数据库管理存储器(DMS)表空间指定为预先分配(pre-allocated)的存储器。
这种存储器可能是一台设备或是一个文件。
DB2负责管理存储这一空间。
[注解]:
一定不要将数据存放到你还没有将其定义为DB2(DMS)容器的物理设备上。
当创建容器时,便将存储空间分配给它。
当使用容器和DMS表空间时,要注意以下规则:
·如果容器是一个文件,那么在创建DMS表空间时创建该容器,在去除DMS表空间时去除该容器。
·当创建用于DMS表空间的容器时,便将存储空间预先分配给该容器。
·使用ALTERTABLESPACE语句可以动态地将增加到DMS表空间。
[注解]:
AIX注解──如果容器在AIX的逻辑卷中,那么该容器必须在创建表空间之前就存在。
在
去除DMS表空间之后,该逻辑卷仍然存在,并且必须删除。
使用DMS表空间比使用SMS表空间的主要差别和优点之一是能够将一个表的数据跨越存放到多个表空间中去。
当创建表时,用户可以决定将表中的某些对象存放到不同的表空间中去。
DMS表空间允许用户将大型对象(LF和LOBs)和索引存放到不同的表空间中去然后再将一个表分开存放到三个不同的表空间中去。
图3.5显示了一个叫做employee(雇员)表的例子。
该表分布到三个DMS表空间。
employee表包含诸如个人简历和照片方面的信息。
这些信息都以CLOB和BLOB的数据类型存储。
这些信息不经常被更新或访问,因此表的这部分内容单独地放置在一个叫做tbslong的表空间中,它只包含长型字段或LOB数据类型。
employee表在表中还定义了一个叫做empno的索引。
大多数对表的存取操作都是使用这个索引来完成。
表的索引部分已经被放置到一个叫做tbsinx的DMS表空间中。
表空间tbsinx使用在我们最快磁盘设备上的容器定义。
employee表的其余部分放置在表空间texas中。
当用户将长型字段、LOB数据和索引从常规的表数据中分离出来,从一个表中分离出来的常规数据不能被分散到不同的表空间。
TBSLONG
TBSINX
TEXAS
表空间
表空间
表空间
EMPLOYEEDATAEMPLOYEEINDEXLONGDATAFOR
EMPLOYEETABLE
=Dataportion=Dataportion=Dataportion
ofEMPLOYEEofEMPLOYEEofEMPLOYEE
图6.5在DMS表空间中表的存放
3.2.5.1什么时候应当使用DMS表空间
与SMS相比,DMS存储模型有重要的好处。
下面列出它的主要优点:
1.用户可以根据数据库对象的类型对它们存放位置进行更多的控制。
表可以被分散到多个DMS表空间中存放,允许将表数据与它的索引分开。
2.用户对于诸如后备和恢复这样的操作任务在管理上有着更多的灵活性。
用户可以控制那些不被经常访问的数据项,比如BLOBs它们可以将映象存放在不同的表空间中。
这些BLOBs可以包含那些既不被经常访问又不被经常更新的数据。
3.使用DMS表空间具有性能一的优势,因为DB2了解更多有关数据存放方面的知识。
如果使用用于DMS表空间的设备,那么用户就可以避免使用操作系统的文件系统所带来的开销。
4.DMS表空间提供了方便的可伸缩性,因为用户能够动态的把容器增加到表空间。
当增加新的容器时,DB2可以自动地完成数据的平衡分布任务。
5.如果用户了解自己表空间的最大值,那么可以考虑使用DMS表空间。
当插入数据库对象时,DMS会为它们预分配存储空间。
数据库不需要与其它的应用程序争夺磁盘空间。
考虑表3.1中的条件可以有助于用户去决定自己的用户空间应当采用SMS类
型,还是应当采用DMS类型。
表3.1SMS和DMS用户表空间的特性对照表
特性
SMSDMS
能够在表空间中动态地增加容器数目吗?
能够把索引数据存放到不同的表空间中码?
能够把长型数据存放到单独的表空间中码?
表可以分散存放到多个表空间中码?
仅在需要时才分配空间?
表空间可以被定向到不同类型的磁盘空间码?
创建之后,区段大小能够改变码?
不能能
不能能
不能能
不能能
是否
是否
不能不能
3.2.6规划表空间环境
当用户完成数据库的逻辑设计任务之后,用户需要实现这一设计。
这个设计将要取决于资源,主要是用户提供以数据库使用的磁盘空间或磁盘设备。
规划自己的用户表空间环境的目标是要决定表空间类型和用户表在表空间中的存放位置。
为了有效地规划自己的环境,用户需要收集有关自己的表与索引大小方面的信息。
用户需要完成的任务列表如下:
1.确定数据库的逻辑设计。
2.将数据库的逻辑设计影射为表空间的布局配置。
3.创建数据库。
4.确定表、任何索引和表空间的大小。
5.确定表空间中容器的特性。
6.准备物理环境。
这可能需要添置设备。
7.创建表空间。
8.在表空间内创建表和索引。
3.2.7表空间的逻辑设计
在把数据库设计影射为表空间布局时,有若干种途径。
这涉及到怎样把表分组存放到表空间中。
·针对存取特点对表分组。
表可以根据它的特点一起进行分组。
例如,经常进行连接的表可以放置到同一个表空间中,使用多个容器去充分利用并行I/O的优点。
·将相关的表分组到表空间中。
通过引用限制条件或触发器共享依赖关系的表可以一起分组。
在表空间级别上可以执行后备和恢复操作,以减小恢复整个数据库所需要的时间。
把在引用上相关的表一起存放到同一个表空间中。
·为每个表创建一个表空间
这种策略允许用户对每个表进行单独的后备,因为后备只能够在表空间或数据库级别上进行。
用户可以在去除表空间之后恢复分配给容器的空间。
因为许多数据库可能涉及大量的表,因此大量表空间的管理可能是困难的,而不被推荐。
一旦用户把表分组到表空间中去,那么用户便希望进一步用数据类型去将每一个表空间
分类。
比如,存放LOB和LONGVARCHAR数据的表空间,单独存放常规表数据的表空间。
这样,如果用户打算去定义索引或使用LOBs和LONGVARCHAR类型数据,那么用户就需要去创建比原来所期望的要更多的表空间。
我们将使用db2cert数据库作为把表分组到表空间的例子。
表空间被分组的情况如图3.6所示,SYSCATSPACE和TEMPSPACE1将是SMS表空间。
常规数据被存放到叫做ts01的表空间中。
表db2.candidate的BLOBS将被存放到叫做lobs01的单独的表空间中,因为它们不经常被存取或更新。
最活跃的表test_taken将被放置到一个单独的表空间ts03中。
其它的表test和test_center相对不太活跃,它们一起被放置到同一个表空间ts02中。
Databasedb2cert
Tablespacets01
TEMPSPACE1
SYSCATSPACE
Table
candidate
Table
Tablespacets02
Lobs01
BLOBSforcandedate
test
Test_center
Index01
Tablespacets03
Indexesfortest_taken
Test_taken
图3.6样列数据库和表空间环境
在样例数据库中有四个表:
·db2.candidate
这个表中装有关于应考学员的信息,比如,姓名、标识码、地址和照片等。
表的常规数据将存放在表空间ts01中,BLOBs存放在表空间lobs01中。
·db2.test
这个表包含有关每个考试的信息,比如,考试名称、截止分数线和考试时间长度。
这表在表空间ts02中被创建。
·db2.test_center
这个表描述应考学员在其中参加DB2授证课程考试的各个考试中心的信息。
该表将存放在表空间ts02中。
·db2.test_taken
这个表最活跃。
它记录某个应考学员在某个考试中心参加每门授证考试的详细情况。
该表将被存放在表空间ts03中,它的索引则存放在另外一个单独的表空间index01中。
3.3创建数据库
CREATEDATABASE命令让用户在创建数据库的同时创建自己的表空间。
命令CRATEDATABASE的语法格式在图3.7中给出。
CREATEDATABASEdatabase-name[ONpath/drive]
[ALIASdatabase-alias]
[USINGCODESETcodesetTERRITORYterritory]
[COLLATEUSING{SYSTEM│IDENTITY}]
[NUMSEGSnumsegs][DET_EXTENT_SZdet_extentsize]
[CATALOGTABLESPACEtblspace-defn]
[USERTABLESPACEtblspace-defn]
[TEMPORARYTABLESPACEtblspace-defn]
[WITH″Comment-string″]
tblspace-defn:
MANAGEDBY{SYSTEMUSING{stringˊ
[{,ˊstringˊ}…])}
[EXTENTSIZEnumber–of–pages]
[PREFETCHSIZEnumber–of-pages]
[OVERHEADnumber–of–miliseconds]
[TRANSFERRATEnumber–of-miliseconds]
图3.7创建数据库的语法格式
CREATEDATABASE用一个用户自定义的校核序列(只通过API)初始化新的数据库,创建三个初始表空间、系统表,并为主要的恢复日志文件分配空间。
有关参数的情况介绍如下:
·数据库名
这是一个具有唯一性的名字,它指派给一个新数据库。
它的长度是1-8个字符。
它必须以一个字母@、#或$开头。
它可以包含a-z、A-Z、0-9、@、#或$等字符。
·ONpath/drive(路径/驱动器)
按照默认方式,如果没有指定路径或驱动器,就使用环境变量DEFDBPATH去确定初始文件所在的位置。
·ALIAS数据库别名。
数据库别名。
它的默认值是数据库名。
·USINGCODESET(使用代码集)
这个参数规定用于向数据库输入数据的代码集。
·TERRITORY(数据输入领域)
规定用于向数据库输入数据的区域。
·COLLATEUSING(校核使用)
辨认对数据库使用的校核次序。
SYSTEM指示校核次序是基于当前数据输入区域之上。
IDENTITY指示校核次序是一辨认次序,在这一过程中字符串要一个字节一个字节地进行比较。
·NU