Username: Password:

学习笔记-DB2 UDB V8.1 管理 学习笔记(一)
来源:作者:张洋 发布时间:2007-11-07 00:00:00

目录 参考资源
在DB2中有关实例(Instance), 数据库(Database),表空间(TableSpace),容器(Container)等概念:

在一个操作系统中,DB2数据服务能够同时运行多个实例(有别于Oracle在一个系统内只能起一个实例),数据库定义在实例中,一个实例能够包含多个数据库。在同一个实例中的不同数据库是完全单独的,分别拥有自己单独的系统编目表。

表空间分为DMS方式和SMS(System manegement Space)方式,定义在数据库中,一个数据库中必须存在两个系统基本的表空间,分别是系统编目表空间(SysCatSpace)和系统临时表空间(SysTempSpace)。在数据库中创建的任何对象都以在系统编目表空间中增加记录的方式体现,对于临时表空间,其占用磁盘大小是根据使用情况动态伸缩的,即仅在需要时才分配磁盘空间,并在使用后进行回收。此外,若用户需要创建表,则需要创建用户表空间(UserSpace),若需要使用临时表,则需要创建用户临时表空间(UserTempSpace)。

DMS和SMS类型在表空间建立时指定,建好后不能转换。对于DMS方式,一个表空间对应了一个或多个容器(Container),容器指定了数据的物理存储位置。对于SMS方式,只能够指定一个目录,不能够增加。

容器分为三种类型,前两种是文档和设备,用于DMS方式的表空间;更有一种是目录,用于SMS方式的表空间,此种方式无需人工管理数据存储文档,DB2可根据情况在目录中自动增加存储文档,只要磁盘空间允许。实质上,表空间是数据存储的逻辑位置定义,容器则是数据存储的物理位置定义。


影响一个数据库的性能主要有以下因素:磁盘(Disk), 内存(Memory), 处理器(CPU), 网络(Network)。其中以磁盘最为显著,90%的性能瓶颈可能来自于磁盘的IO竞争;其次是内存,一方面是指物理内存的总量要满足需求,另一方面是指和内存相关的配置参数应正确配置;当然处理器的性能也很重要,多路CPU会对哪些依赖计算能力的复杂SQL查询起到显著的效果;网络不属于主要因素,属于客观的环境因素,是指过慢的网速会对数据的传输造成影响。以下列出一些对于提高数据库性能有效的方法:

对于运行数据库服务的服务器能够尽可能的配置多块物理磁盘,每块的容量不必太大,这样能够有效的分担数据存储和读取操作过程的磁盘IO竞争。即采用多块小容量的磁盘在性能上要优于仅采用一块大容量的磁盘。

假如条件允许,尽量使数据存储服务和操作系统分别运行在物理分开的磁盘上。

采用DMS(Database Management Space)管理方式的表空间。

在物理不同的磁盘上创建多个表空间。然后能够将数据和索引分别存放在不同的表空间,这样能够显著的提高性能。还能够把一个使用频繁的大表纵向拆成多个小表,分别存放在不同的表空间中,然后用一个视图进行联合。

DB2服务器能够管理裸设备,即除系统连同DB2服务运行磁盘以外,为DB2数据存放单独准备磁盘,能够是多块,分区后无需格式化,创建裸设备后直接交给DB2进行管理,用于存储数据。

系统的临时表空间对数据库性能影响很大,当由管理的物理内存不能满足数据库操作的需要时,DB2便会把临时数据写到磁盘上,这时便用到了系统临时表空间,并且这种情况会经常发生。

尽量在磁盘靠近最内层磁道的位置安放数据,因为此处磁盘的访问速度较快。


DB2的参数配置分为两个级别,一个是实例级别,另一个是数据库级别。对数据服务性能影响较大的参数主要在数据库级别配置。以下是三个比较重要的内存配置参数:

bufferpage: 由同一个数据库中的任何对象共享。

sortheap: 用于排序的内存交换区,非共享,不宜配置太大,否则,很容易引起内存耗尽,因为每一个事务都会申请单独的内存用于排序。

locklist: 共享内存,用于记录数据服务运行中建立的锁。建议配置20Mb左右,需要时根据实际情况进行调整。DB2默认使用行级锁,假如配置太小,当锁的记录太多时,则会导致内存不足,此时DB2会把多个行锁升级为一个表锁,这样就会大大降低应用程式的并发性能。假如配置太大,则多分配的内存很少会被用到,导致浪费。

其他的一些配置参数:

numdb: 同时能够启动的实例数目


DB2的常用命令:

db2ilist 列出当前系统中定义的DB2实例
daslist 列出系统中的DAS
db2 list database directory 列出当前实例中定义的数据库
db2 list tablespaces 列出当前数据库中定义的表空间
db2 list tabses [for all] 列出当前数据库中的表
db2 list active db 列出活动的数据库

db2 get dbm config
get db cfg for databasename
db2 update db cfg for databasename using bufferpage 600M
db2 alter bufferpool IABMDEFAULTBP size =1
db2 list applications show detail

以上命令能够在后面加 " show detail" 参数,显示周详信息。


DB2数据存储的页大小只能在表空间级别统一指定(区分于Oracle,能够定义在表级别), 并且建好后不能修改。

能够手工建立一个页大小为4K的DMS用户临时表空间,然后把系统默认的SMS系统临时表空间删除。为满足应用需求,一般还应再建立一个页大小在8K以上的用户临时表空间。

DB2 UDB V8.1 对RedHat Linux 9 的支持不好,默认情况下无法启动GUI安装程式(能够通过配置环境LD_ASSUME_KERNEL=2.2.5解决),并且不会安装Sample数据库,控制中央也无法正常启动。 


当使用COUNT()函数时,假如表中的记录数 > 2 147 483 647行,则函数可能返回错误的结果,这时能够使用返回类型为DECIMAL(31, 0)的COUNT_BIG()函数。

DISTINCT 关键字能够用在COUNT()函数中,如:SELECT COUNT(DISTINCT id) FROM TABLE,这代表将不对id列的重复值进行计数。

ORDER BY子句后面假如写了多个列名,需要分别指定升序或是降序。

能够在load大量数据时,暂时关闭表的日志选项。使用:ALTER TABLE ... ACTIVATE NOT LOGGED INITIALLY

DB2的几个特别寄存器:CURRENT DATE, CURRENT TIME, CURRENT TIMESTAMP, USER(用户ID).

有关日期的操作:CURRENT TIMESTAMP + 2 DAYS(or HOURS, SECONDS, MONTHS, YEARS, etc.)

case 语句的使用:case when 条件一 then 动作一 else 动作二 end; 能够欠套使用。

在视图的创建语句中无法使用order by 子句和 fetch n rows 子句。但对于order by能够用如下方法替代实现,但是会影响效率。
create view v_name1(c1, c2, c3) as
select * from ( 
select column1, column2, column3
from t1
order by column1 ) as t1;

喜欢本文,那就收藏到:

    Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网
相关评论  我也要评论
还没有关于此文章的相关评论!
  • 昵称: (为空则显示guest)
  • 评论分数: ★ ★ ★★★ ★★★★ ★★★★★
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
  • 导航
    赞助商
    文章类别
    订阅