qileilove

blog已经转移至github,大家请访问 http://qaseven.github.io/

db2 基础

第一篇基础理论
1DB2数据库基本概念
1.1数据库对象
关键的数据库对象包括:实例、数据库、节点组、表、视图、索引、模式、
系统目录表。图1显示了一些数据库对象之间的关系。它也显示了表、索引和长
整型数据存储在表空间中的情况。

图1  系统 》实例》数据库》节点组》表空间,索引长整数数据

图1.一些数据库对象之间的关系
1.1.1 1.1.1 实例
实例(有时称为数据库管理程序)是管理数据的DB2代码。它控制可对数
据执行的操作,并管理分配给它的系统资源。每一个实例都是一个完整的环境。
一个实例有它自己的数据库(其他的实例不能存取它)。它还有独立的安全性,
不受同一机器(系统)上其他实例的影响。
1.1.2 数据库
关系数据库将数据表示成表的集合。表由数目已定的列和任意数目的行组
成。每个数据库都包括一组描述数据的逻辑和物理结构的系统目录表,一个包含
为该数据库分配的参数值的配置文件以及一个带有正在进行的事务和可归档事
务的恢复日志。
1.1.3 节点组
节点组是一个或多个数据库分区组成的集合。当您想为数据库创建表时,首
先创建节点组以存储表空间,然后创建表空间以存储表。
1.1.4 表
关系数据库将数据表示成表的集合。表由逻辑排列的行和列数据组成。所有
数据库的表数据都被存储在表空间中。
1.1.5 视图
视图是高效率的数据呈现方法(无需维护数据)。视图不是实际的表,不需
要永久性存储器。创建并使用一个“虚拟表”。
视图可以包括它所基于的表中的所有或某些列或行。例如,可以在视图中连
接一个部门表和一个员工表,以便可以列出特定部门中的所有雇员。图2显示了
表和视图的关系。
1.1.6 索引
索引是一组关键字,其每一个都指向一些行。例如,图3中,表A的一个
索引基于表中的员工号码。此关键字提供指向表行的指针:员工号码19指向员
工KMP。通过使用指针创建指向数据的直接路径,索引是更有效的存取表行成
为可能。
SQL优化器自动选择最有效率的存取表中数据的方法。当确定最快速的数
据存取路径时,优化器会将索引考虑在内。
可创建唯一索引以确保索引关键字的唯一性。索引关键字是定义了索引的一
个列或一些列的有序集合。使用唯一索引将确保在编入的索引的列中,每个索引
关键字的值都是唯一的。图3显示了索引与表之间的关系。
1.1.7 1.1.7 模式
模式是一个标识符,如用户ID,它帮助分组表和其他数据库对象。模式可
以归个人拥有,拥有者可以控制对数据以及其中的对象的存取。
模式也可以是数据库中的对象。它可以在创建模式中的第一个对象时自动创
建。这样的对象可以是任何可以由模式名限定的对象,如表、索引、视图、程序
包、单值类型、函数或触发器。
1.1.8 系统目录表
每个数据库都包括一组描述数据的逻辑和物理结构的系统目录表。DB2为
每个数据库维护一大组系统目录表。这些表包含有关数据库对象(例如,用户表、
视图和索引)的定义信息,以及用户对这些对象所拥有的权限的安全性信息。它
们在数据库创建时被创建,并在常规操作期间得到更新。不能显示的创建或卸载
下它们,但是可以使用目录视图查询和查看它们的内容。
1.2存储器对象
下列数据库对象用来定义在系统上存储数据的方式以及改进(与存取数据相
关的)性能的方法:表空间、容器和缓冲池。
1.2.1 表空间
数据库由称为表空间的部件组成。表空间是用来存储表的位置。当创建表时,
您可以决定将特定对象(如索引和大对象)数据与其余表数据分开存放。表空间
也可以分布在一个或多个物理存储设备上。图4显示了在表空间之间分布数据时
具有的一些灵活性。
将容器分配给表空间。容器是分配的物理存储器(如文件和设备)。
表空间可以使系统管理空间(SMS)或数据库管理空间(DMS)。对于SMS
表空间,每个容器都是操作系统的文件空间中的一个目录,由操作系统的文件管
理器控制存储空间。对于DMS表空间,每个容器或者是固定大小的预分配文件,
或者是物理设备如磁盘,由数据库管理程序控制存储空间。
表空间有三种类型:规则、临时和长整数。
包 含 用 户 数 据 的 表 存 放 在 规 则 表 空 间 中 。 缺 省 用 户 表 空 间 名为
USERSPACE1。索引也存储在规则表空间中。系统目录表存放在规则表空间中。
缺省系统目录表空间名为SYSCATSAPCE。
包含长整数字段数据或长整数对象数据(如多媒体对象)的表存放在长整数
表空间中。
临时表空间分为系统临时表空间或用户临时表空间。系统临时表空间用来存
储SQL操作(如排序、重组表、创建索引和连接表)期间所需的内部临时数据。
虽然可以创建任意数目个系统临时表空间,但建议您只适用大多数表所使用的页
大小创建一个。缺省系统临时表空间名为TEMPSPACE1。用户临时表空间用来
存储已说明全局临时表(已说明全局临时表存储的是应用程序临时数据)。用户
临时表空间不是在数据库创建时缺省创建的。
1.2.2 1.2.2 容器
容器是物理存储设备。它可以由目录名、设备名或文件名标识。
将为表空间分配容器。单个表空间可以横跨多个容器,但每个容器只能属于
一个表空间。
图5举例说明了表与数据库中的表空间、相关联的容器和磁盘之间的关系。
图5.表空间、相关联的容器和磁盘之间的关系
EMPLOYEE、DEPARTMENT和PROJECT表在HUMANRES表空间中,该
表空间横跨容器0、1、2、3和4。此示例显示每个容器存在于不同的磁盘上。
任何表的数据都以循环方式存储在表空间中的所有容器中。这能在属于给定
表空间容器之间平衡数据。数据库管理程序在使用另一个容器之前写入一个容器
的页数称为数据块大小。
图5.表空间、相关联的容器和磁盘之间的关系
EMPLOYEE、DEPARTMENT和PROJECT表在HUMANRES表空间中,该
表空间横跨容器0、1、2、3和4。此示例显示每个容器存在于不同的磁盘上。
任何表的数据都以循环方式存储在表空间中的所有容器中。这能在属于给定
表空间容器之间平衡数据。数据库管理程序在使用另一个容器之前写入一个容器
的页数称为数据块大小。
1.2.3 缓冲池
缓冲池指的是从磁盘读去高速缓存表和索引数据页时或修改它们时分配给
它们的主存储器。缓冲池的目的是改进系统性能。从内存存取数据要比从磁盘存
取数据块的多;因此,数据库管理程序需要读写(I/O)的次数越少,性能也越
好。(可以创建多个缓冲池,虽然在大多数情况下只需要一个。)
因为可以缩短慢速I/O所造成的延迟,所以缓冲池的配置是最重要的调整项
目。
1.2.3 缓冲池
缓冲池指的是从磁盘读去高速缓存表和索引数据页时或修改它们时分配给
它们的主存储器。缓冲池的目的是改进系统性能。从内存存取数据要比从磁盘存
取数据块的多;因此,数据库管理程序需要读写(I/O)的次数越少,性能也越
好。(可以创建多个缓冲池,虽然在大多数情况下只需要一个。)
因为可以缩短慢速I/O所造成的延迟,所以缓冲池的配置是最重要的调整项
目。
2.1AIX系统存储管理简介
在AIX系统中,文件系统是建立在逻辑卷上的,逻辑卷是属于一个卷组的,
卷组是由实际的物理磁盘组成,逻辑卷在实际物理硬盘中可以不连续,它可以跨
越多个物理硬盘而存在。AIX系统中物理与逻辑区段的映射如图6所示
在逻辑上,逻辑卷存在于卷组中,而在物理上,它存在于物理卷上,物理卷
是硬盘。硬盘的界面分为5个同心区域:外边缘(Outer-Edge)、外中间
(Outer-Middle)、中央(Center)、内中间(Inner-Middle)和内边缘(Inner-Edge),
如图7所示。
由于磁盘机械装置的物理移动,边缘(Edge)区域的搜索时间最长。逻辑卷
位于哪个区域上,对于逻辑卷的读写效率影响很大。
其中,中央(Center)区域是磁盘搜索时间最短和访问速度最快的。通常,
把经常要访问的逻辑卷放在磁盘的中央区域,把很少访问的逻辑卷放在磁盘的边
缘(Edge)区域,其它逻辑卷放在磁盘的中间(Middle)区域。
2.2裸设备和文件系统
数据库的物理实现对数据库的运行时性能至关重要,物理实现更多的需要考
虑硬件和系统平台。
数据库服务器的性能通常是通过事务吞吐量和应用程序响应时间来测量的,
该性能主要取决于I/O子系统的性能。为了获得最大可能的I/O吞吐量,数据库
管理员和系统管理员需要特别注意数据库表数据的布局。在AIX系统中通常有
两种数据存储形式:裸设备、文件系统。裸设备,也叫裸分区(原始分区),是
一种没有经过格式化,不被Unix通过文件系统来读取的特殊字符设备。它由应
用程序负责对它进行读写操作。不经过文件系统的缓冲。因为使用裸设备避免了
再经过AIX操作系统这一层,数据库管理系统直接读写硬盘,所以使用裸设备
对于读写频繁的数据库应用来说,可以提高数据库系统的性能。当然,这是以磁
盘的I/O非常大,磁盘I/O已经成为系统瓶颈的情况下才成立。如果磁盘读写确
实非常频繁,以至于磁盘读写成为系统瓶颈的情况成立,那么采用裸设备确实可
以提高性能。
DB2数据库有三种表空间:目录表空间、数据表空间和日志表空间。目录
表空间和日志表空间均存储在文件系统中,而数据表空间的存储类型是基于实际
情况和以往的开发经验来决定。在数据仓库系统中,在ETL的任何一个阶段都
要求高速的磁盘I/O,需要大批量的数据读取或写入,磁盘I/O是数据仓库系统
性能的瓶颈。根据经验,数据表空间可以采用裸设备的存储方式。
以下是一个例子。
逻辑结构 DB2表空间 逻辑设备/文件系统 空间大小 备注
目录表空间 SYSCATSPACE /db2_tag 3GB 文件系统
数据处理区 TBSPTEMP
/dev/rdb2tbsptemplv
/dev/rdb2tbsptemp2lv
10GB
10GB
裸设备
代码对应区
TBSPINTE /dev/rdb2tbspintelv 20GB 裸设备
整合区
日志表空间 - /intedb_log 20GB 文件系统
2.4 2.4如何合理创建表空间设备
2.4.1 原则
1. 一个表空间跨多个物理磁盘,以获得更好的I/O并行性
2. 根据重要性不同,让表空间分布于磁盘的不同位置
� 索引、重要数据位于中心
� 将次重要数据、文件系统放在中间和边缘
3. 将日志存放在独立于数据表空间的磁盘上,以获得更好的性能
注:如果数据位于“独立磁盘冗余阵列”(RAID),那么就不需要考虑数据以上的第1和第2

2.4.2 表空间容器的创建方法
按以下说明创建逻辑卷,并根据设备的重要性依次创建(首先创建最重要
的),可以保证最重要的位于中央,按重要性依次往外排列,可以做到读写性能
最优。
1. smitlv
2. 选择多个物理盘(PHYSICALVOLUMEnames),界面如图9所示。移动光
标,用ESC+7选择多块物理磁盘PV。3. 在LogicalvolumeTYPE中输入raw,即裸设备类型。
4. 物理盘区域(POSITIONonphysicalvolume)选择center,将范围(RANGEof
physicalvolumes)选择最大(maximum)。如图10所示。
2.4.3 某数据库表空间设备情况
数据库在创建表空间设备时完全遵循了2.4.1节中的原则。
在创建逻辑卷时按照图9所示创建,保证了一个设备跨越多个物理磁盘(尽
可能多),以获得更好的I/O并行性。
并且,严格按照重要性降低的次序作为创建逻辑卷的顺序。图11显示的是
整合数据库在磁盘hdiskpower8上的设备创建情况。由图中看出,整合数据库严
格遵循了设备按照重要性分布的原则:
� 索引、重要数据位于中心
� 将次重要数据、文件系统放在中间和边缘
2.5 2.5建库语句参考
某个数据库部分建库语句:
---创建数据库在一个2G的文件系统/anly_tag
db2 create database anly on /anly_tag alias anly using codeset gbk territory cn collate using
system
---创建bufferpool
db2connecttoanlyuserdb2admin
db2createbufferpoolTMPBF32Kimmediate size32000pagesize32k
---创建数据表空间(8G*4)并指定相应的bufferpool
db2 create tablespace TBSPANLY pagesize 32 k managed by database using (device
'/dev/ranlytbsplv' 262144)bufferpoolTMPBF32K
db2altertablespaceTBSPANLYadd(device'/dev/ranlytbsplv2' 262144)
db2altertablespaceTBSPANLYadd(device'/dev/ranlytbsplv3' 262144)
db2altertablespaceTBSPANLYadd(device'/dev/ranlytbsplv4' 262144)
---创建系统临时表空间(2G的文件系统/anly_tmp/tmp)并指定相应的bufferpool
db2createsystem temporary tablespace TBSPTMP32Kpagesize32kmanagedbysystem using
('/anly_tmp/tmp')extentsize 8prefetchsize16bufferpoolTMPBF32K
----修改日志文件大小为25000*4K
db2updatedbcfgforanlyusingLOGFILSIZ25000
db2updatedbcfgforanlyusingLOGPRIMARY20
db2updatedbcfgforanlyusingLOGSECOND50
db2updatedbcfgforanlyusingNEWLOGPATH/anly_log
----修改表空间大小
db2altertablespace tbsptempdrop(device'/dev/rdb2tbsptemp2lv')
db2altertablespace tbsptempresize(device'/dev/rdb2tbsptemp3lv' 327680)
33缓冲池和表空间
3.1缓冲池
通常,为每一页面大小的系统临时表空间建立一个缓冲池就足够了。因为在缓冲池管理
方面,我们完全可以信任DB2。如果想在这方面继续提高性能,则可以参考本节的文字。
DB2在其缓冲池的自我调优方面十分擅长,并且会将经常被访问的行放入
内存,因此一个缓冲池就足够了。(这一选择也避免了管理多个缓冲池的复杂性。)
如果时间允许,并且需要进行改进,那么可能需要使用多个缓冲池。其思想
是将访问最频繁的行放入一个缓冲池中。在那些随机访问或者很少访问的表之间
共享一个缓冲池可能会给缓冲池带来“污染”,因为有时候要为一个本来可能不
会再去访问的行消耗空间,甚至可能将经常访问的行挤出到磁盘上。如果将索引
保留在它们自己的缓冲池中,那么在索引使用频繁的时候(例如,索引扫描)还
可以显著地提高性能。
这与我们对表空间的讨论是紧密联系的,因为要根据表空间中表的行为来分
配缓冲池。如果采用多缓冲池的方法,采用4个缓冲池比较合适:
1. 一个中等大小的缓冲池,用于临时表空间。
2. 一个大型的缓冲池,用于索引表空间。
3. 一个大型的缓冲池,用于那些包含经常要访问的表的表空间。
4. 一个小型的缓冲池,用于那些包含访问不多的表、随机访问的表或顺序访问的表的表空

间。
3.2缓冲池大小
缓冲池大小需要综合考虑系统内存和服务器工作负载情况而定。通常,OLTP类型分配
75%的可用内存;OLAP类型分配50%的可用内存,将剩下的50%分配给SORTHEAP。
缓冲池对应于系统的内存空间,所以千万不要为缓冲池分配多于所能提供的
内存,否则就会招致代价不菲的OS内存分页。通常来讲,如果没有进行监控,
要想知道一开始为每个缓冲池分配多少内存是十分困难的。对于OLTP类型的工
作负载,一开始将75%的可用内存分配给缓冲池比较合适。对于OLAP/DSS,经
验法则告诉我们,应该将50%的可用内存分配给一个缓冲池(假设只有一种页面
大小),而将剩下的50%分配给SORTHEAP。
3.3表空间页大小
在页大小足以容纳一条记录的前提下,随机更新操作,倾向于用较小的页大小;而对于
一次访问大量行的操作,较大的页大小可以提供更好的性能。
为了创建一个表,必须有一个表空间,其页面大小应足以容纳一行。您可以
选择使用4、8、16或32KB这几种页面大小。有时候必须使用较大的页面大小,
以回避某些数据库管理器的限制。例如,表空间的最大尺寸与表空间的页面大小
成比例。如果使用4K的页面大小,那么表空间的大小(每个分区)最大是64GB,
如果使用32K的页面大小,那么最大是512GB。
对于执行随机更新操作的OLTP应用程序,采用较小的页面大小更为可取,
因为这样消耗的缓冲池中的空间更少。
对于要一次访问大量连续行的OLAP应用程序,通常使用较大页面大小效
果会更好些,因为这样可以减少在读取特定数量的行时发出的I/O请求的数量。
较大的页面大小还允许您减少索引中的层数,因为在一页中可以保留更多的行指
针。然而,也有例外情况。如果行长度小于页面大小的255分之1,则每一页中
都将存在浪费的空间,因为每页最多只能有255行(对于索引数据页不适用)。
在这种情况下,采用较小的页面大小或许更合适一些。
3.4系统临时表空间
为每种页面大小的表空间,建立一个系统临时表空间,通常使用文件系统,大小根据排
序和重组事物的大小确定。
对于所使用的每种页面大小,必须存在一个具有匹配页面大小的系统临时表
空间(以支持排序和重组)。然后将所有享用匹配页面大小的表空间指派给具有
相同页面大小的缓冲池。
如果对性能还有更苛刻的要求,并且有时间投入,那么可以使用DMS表空
间,并且根据使用情况来组织表。另外,还要遵循前面给出的关于使用多个缓冲
池的建议。对于每种页面大小,创建一个:
1. 系统临时表空间。
2. 用于索引的常规表空间。
3. 用于频繁访问的表的常规表空间。
4. 用于访问不多的表、随机访问的表以及顺序访问的表的常规表空间。
5. 用于LOB数据的大型表空间。
3.5区段大小和预取大小
区段大小(extentsize)和预取大小(prefetchsize)是表空间的参数,对于数据存
取性能至关重要。
区段大小跟表空间中表的平均大小有一定的比例关系,通常表越大,区段大小也越大。
如果表空间驻留在磁盘阵列上,则区段大小应设置成条纹大小。
预取大小通过公式确定:prefetch size = (# containers of the table space on
differentphysicaldisks)* extentsize。
磁盘阵列的情况:prefetchsize=extentsize*(#ofnon-paritydisksinarray)。
3.5.1 3.5.1 区段大小
extent size 指 定 在 跳到 下 一 个 容 器之 前 , 可 以 写入 到 一 个 容 器中的
PAGESIZE页面的数量,这个参数是在创建表空间时定义的(之后不能轻易修
改)。处理较小的表时,使用较小的区段效率会更高一些。
下面的经验法则是建立在表空间中每个表的平均大小的基础上的:
1. 如果小于25MB,extentsize为8
2. 如果介于25到250MB之间,则extentsize为16
3. 如果介于250MB到2GB之间,则extentsize为32
4. 如果大于2GB,则extentsize为64
对于OLAP数据库和大部分都要扫描(仅限于查询)的表,或者增长速度
很快的表,应使用较大的值。
如果表空间驻留在一个磁盘阵列上,则应将区段大小设置成条纹大小(也就
是说,写入到阵列中一个磁盘上的数据)。
3.5.2 预取大小
对于预取大小,可以通过使用ALTERTABLESPACE轻易地修改。最优设置
差不多是这样的:prefetchsize=(#containersofthe table spaceondifferentphysical
disks)*extentsize。
如果表空间驻留在一个磁盘阵列上,则设置如下:prefetchsize=extentsize*
(#ofnon-paritydisksinarray)。

posted on 2014-01-30 00:48 顺其自然EVO 阅读(245) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 
<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

导航

统计

常用链接

留言簿(55)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜