ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 学习DB2笔记_Admin_Administration Guide Planning

学习DB2笔记_Admin_Administration Guide Planning

原创 Linux操作系统 作者:redhouser 时间:2011-07-27 17:06:03 0 删除 编辑

1,配置参数
相比Oracle使用一个参数文件,DB2配置文件包括2个:
数据库管理器配置文件(database manager configuration file):db2systm。在分区数据库下,所有分区使用存储在共享文件系统下的同一个文件。
数据库配置文件(database configuration file)。SQLDBCON。在分区数据库下,每个数据库使用独立的配置文件,其中参数可能不同。

2,环境变量和概要注册表(profile registry)
在引入概要注册表前,修改环境变量需要重起(服务)。
存在4类概要注册表:
*DB2 Instance Level Profile Registry
*DB2 Global Level Profile Registry
*DB2 Instance Node Level Profile Registry
*DB2 Instance Profile Registry,db2ilist

DB2获取参数顺序如下:
*操作系统环境变量(使用set,export设置)
*Instance Node Level(使用db2set -i 方式设置)
*Instance Level Profile Registry(使用db2set -i 方式设置)
*Global Level Profile Registry(使用db2set -g方式设置)


3,数据安全
包括2部分:
*认证,由操作系统或其他产品支持。操作系统认证,或者用户id与密码组合,这两者都支持本地或远程认证(前者需要服务器端支持客户端认证)。
*授权,由数据库管理器实现,包括特权(privilege)、权限(authority)和LBAC。特权控制数据库资源的访问;权限对一组特权进行控制,实现对实例、数据库、数据库对象的访问。操作系统用户所属组提供了一种方便的权限控制。

4,HADR(High availability disaster recovery)
*类似于Oracle的dataguard,使用日志同步数据,支持3种保护级别:同步(SYNC), 近似同步(NEARSYNC),异步(ASYNC)。
*HADR中,在初始化备库数据后(主库备份或主库分裂镜像split-mirror copy),初期备库处于追赶状态;在备库追赶上主库后,即处于PEER状态,主库写日志是就会同时发到备库和磁盘。
*HADR针对数据库,而不是实例。同一个实例支持主库A、备库B、非HADR库C;但同一个数据库的主备库不能存在于同一个实例(因为HADR要求主备库同名)。
*HADR要求主备库有相同的硬件、软件;数据库版本、表空间等。---这些要求类似于Oracle 物理 Dataguard的要求。

4,自动维护
DB2支持自动维护操作包括:
*备份(auto_db_backup,auto_maint)
*重组(REORG),(auto_reorg, auto_tbl_maint, and auto_maint)DB2不支持表在线重组(支持索引的allow write access重组)!
*数据访问优化(RUNSTATS):(auto_runstats 缺省ON, auto_tbl_maint, and auto_maint)
*统计数据概要(Statistics profiling)
*自动内存调整(仅支持非分区数据库,SELF_TUNING_MEM,缺省ON)


5,逻辑设计
设计范式:
范式有助于消除冗余和数据的不一致。规范化是一个减少表中列的数量,直至所有非主键列依赖于主键列的过程。
第一范式:表中每个列仅包含单值(不包含值的集合)。
第二范式:非主键列依赖于主键(不存在非主键列对主键的部分依赖)。
第三范式:非主键列列不依赖于其他非主键列,仅依赖于主键。
第四范式:不包含多个独立的多值属性列(如EMPNO-SKILL-LANGUAGE,应拆分为EMPNO-SKILL,EMPNO-LANGUAGE,必须确保多个属性互相独立,否则不应拆分)。

DB2中唯一约束要求非空+唯一。

信息性约束(Informational constraints):可以被优化器用于改善访问路径,但数据库管理器并不强制实施验证的约束。在create table/alter table语句中,通过设置引用、检查约束的属性设置该类约束。
类似于Oracle中约束的RELY属性。

触发器
*不同于Oracle,触发器在触发事件设置之外,可以设置搜索条件;只有在该条件成立的情况下,后续操作才继续进行。
*不同于Oracle,触发器支持的操作有要求。before,select, set transition variables, or signal SQLstates;after,select, insert, update, delete, or signal SQLstates。
*不同于Oracle,同一个表上多个触发器触发顺序是确定的(按触发器创建时间顺序)。
*不同于Oracle,不但支持中间变量(old.column_name..),而且支持中间表。

另外,DB2支持全局变量,作用范围在会话内,类似于临时表。

6,物理设计

DB2数据库目录结构:
SAMPLE库:
/实例/NODE0000/SQL00001/
 

          DB2EVENT
           load
           SQLOGDIR
         50,203 db2rhist.asc        --history information about backups, restores, loading of tables, reorganization of tables, altering of a table space, and other changes to a database
         50,203 db2rhist.bak
            512 SQLBP.1             --buffer pool
            512 SQLBP.2
          4,096 SQLDBCON            --database configuration information
         16,384 SQLDBCONF
              9 SQLINSLK            --ensure that a database is used by only one instance of the database manager.
         24,576 SQLOGCTL.LFH.1      --information about the active logs
         24,576 SQLOGCTL.LFH.2
          8,192 SQLOGMIR.LFH
        135,168 SQLSGF.1            --storage path information
        135,168 SQLSGF.2
      1,835,008 SQLSPCS.1           --tablespace
      1,835,008 SQLSPCS.2
/实例/NODE0000/Sample/
           T0000000
           T0000001
           T0000002
           T0000003
           T0000004
           T0000005
           T0000006
             0 SQLCRT.FLG
/实例/NODE0000/Sqldbdir/
         2,812 SQLDBBAK
         2,812 SQLDBDIR
           540 SQLDBINS


DB2数据库页
*行不会跨多页(A row will not span multiple pages,不会出现行链接,在建表时限制所有列可能插入的最大长度之和;但无法避免更新导致的行迁移)。
*不同页大小支持最大行长度不同,支持的最大列个数不同(4kb表空间支持4005bytes行长度,500列)。
*在常规表空间,每页不超过255行。
*表数据页不包括LONG VARCHAR, LONG VARGRAPHIC, BLOB, CLOB, DBCLOB类型数据,但包含相关描述符。
*LONG VARCHAR/LONG VARGRAPHIC,LOB分别采用不同的空间管理方式,不支持较小的列行内存储(inline)。
*表有append属性(alter table append on),所有插入采用附加方式,不会使用空闲页。
*建有集群索引的表,会使数据按指定索引顺序存放
*多维集群表MDC使用块索引定位数据

临时表空间
*系统临时表空间在创建数据库时自动创建,支持排序、建索引等操作
*用户临时表空间用于支持声明式临时表

数据库分区
*数据库分区组,同一个数据库分区可以在多个数据库分区组中;
*在创建分区组时,就创建了分布影射表(distribution map,包含4096个有分区号循环排列的数组);分区键通过hash影射到0-4096,这样就实现了数据的均匀分布(要求数据本身分布均匀,且不同值较多).
*表同置(collocated)是指两个表所处表空间为相同的分区组(不要求在同一表空间),分区键个数相同,类型兼容
*分区键除了要力求数据均匀分布外,还应该:所有分区键列被频繁作为查询条件或连接条件,参与group by,必须是唯一键或主键的一部分。

表分区
*表被存储在多个存储对象中(一个或多个表空间)
*一个表不同分区存储在多个表空间时,要求这些表空间:相同的pagesize,extentsize,storage mechanism(SMS,DMS),type(REGULAR,LARGE),而且必须在同一个数据库分区。

DB2支持数据组织方式(下面任何一种或任意组合)
*数据库分区-DISTRIBUTE BY HASH
*表分区-PARTITION BY
*多维集群表-ORGANIZE BY


系统管理表空间(SMS)
*空间管理按需分配,不保证一个extent在磁盘物理上连续
*可以利用文件系统的预取和缓存
*每个表至少有一个文件与之对应
*一旦创建,不支持增加容器,不能改变extentsize
*容器指向一个目录,该目录内不能包含其他文件或目录
*空间分配时尝试在每个容器均匀分布extent,只要一个容器没有空闲空间,该表空间就被认为full

数据库管理表空间(DMS)
*空间在创建表空间时分配。使用设备时保证一个extent在磁盘物理上连续;使用文件时,一般情况下连续。
*文件或设备,从性能角度考虑,推荐设备;如果有LOB或long varchar,可以使用文件,以利用文件系统缓存
*尝试在多个容器内平均分布,某个容器满时,在其他容器内分配
*表空间第一个extent用于表空间头,包含控制信息
*表空间第二个extent为SMP,SMP(SpaceMapPage)在表空间中均匀分布,包含两个SMP之间extent的位图信息,用于跟踪extent的使用情况
*表空间第三个extent为Object table,描述表空间内表的第一个EMP(ExtentMapPage)
*表空间第四个extent为第一个表的EMP
*表空间第五个extent为第一个表的data page
*后续extent。。。

SMS .vs DMS
*总体而言,适当调优的DMS在性能上由于SMS。
*对于小的数据库,可以使用SMS
*对于大的数据库,编目表空间和临时表空间使用SMS,表使用DMS,long varchar,LOB,index可以放置在单独的表空间。

DISK IO
*理想情况下,表空间分布在多个物理磁盘上,而且磁盘有足够带宽,有足够的cleaner及时提供空闲空间,则:
在sql查询时,利用prefetch并行获取多个容器的数据,放置在buffer pool的块内(而不是空闲页)。

表空间-缓冲池关系
DB2支持对每个表空间指定缓冲池,这样就可以根据表空间内数据的访问特征设置不同的缓冲池,以优化缓存利用率。

临时表空间
基于以下考虑,建议使用SMS表空间:
*创建临时表时,DMS与SMS相比成本较高
*SMS表空间按需分配,DMS需预分配
*临时表一般仅存在于缓存中,不需要写回磁盘,DMS的性能优势较小。

编目表空间(catalog table space)
基于以下考虑,建议使用SMS表空间:
*编目表数量多,行数较少。DMS中每个表至少包含2个extent,如果使用DMS则应extentsize设置为2或4;建议使用SMS。
*编目表包含LOB字段,数据库不缓存LOB字段;使用SMS可以利用文件系统的缓存。
注:即使创建数据库时所选pagesize大于4k,编目表空间也以4k的pagesize对行长度进行限制。

优化使用RAID的表空间
*每个表空间使用一个容器
*表空间extentsize是RAID条带大小(stripe size)的整数倍
*表空间prefetchsize是extentsize的整数倍,同时是RAID条带大小(stripe size)与RAID并行设备乘积的整数倍
*使用DB2_PARALLEL_IO注册表变量启动并行IO(虽然只有一个容器,并行度=prefetchsize/extentsize)

范围集群表(Range Cluster Table)
*使用特定算法实现记录键值与rid之间的关系(非hash算法,以保持排序),以便快速检索
*用于集群的键应该整型、非空、唯一、单调增长
*由于RCT键已实现非空、唯一,无需创建单独的主键、唯一键
*对于非稀疏键值,且指定DISALLOW OVERFLOW,不需要索引支持
*所需空间在创建表时分配(最大行长度*记录范围确定的行数)
*RCT索引只存在于系统编目内,实际上并不维护
*与普通表需要key、nextkey锁不同,RCT使用“discrete locking”
*不支持表分区、数据库分区、索引集群(clustering index)、MDC、压缩、反向扫描(reverse scan)、load、reorg、AST(Automatic Summary Table)、DGTT(Declared Global Temporary Table)


多维集群表
*主要优势在提高查询性能,减少维护操作(相对集群索引可能因DML操作需要reorg,MDC不需要reorg)
*主要应用于数据仓库和超大数据库环境
*相对集群索引(clustering index)只支持一维集群,且不保证数据的严格集群分布,索引基于记录导致较大空间消耗;MDC支持多维,且严格保证集群分布,索引基于块所需空间较小


6数据库分区设计
分布式事务管理,一个事务需要更新多个数据库,可以选择DB2事务管理器或XA兼容事务管理器(IBM WebSphere or BEA Tuxedo)。
DB2事务管理器使用事务管理器数据库(transaction manager database)跟踪事务状态。客户端使用tm_database配置参数指定事务管理器为DB2数据库。
配置事务管理器参数:
*数据库管理器配置参数:tm_database,spm_name,resync_interval,spm_log_file_sz,spm_max_resync,spm_log_path
*数据库配置参数:maxappls,autorestart


7 XA兼容事务管理器(IBM WebSphere or BEA Tuxedo)
如果要支持非DB2资源参与事务,需要选择XA兼容事务管理器。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/18922393/viewspace-703262/,如需转载,请注明出处,否则将追究法律责任。

下一篇: db2_查询锁方法
请登录后发表评论 登录
全部评论

注册时间:2011-05-26

  • 博文量
    211
  • 访问量
    810028