下图描述了DB2的进程模型,长方形代表处理进程,椭圆形代表处理线程,DB2的主进程是db2sysc,在这个处理进程下有许多线程,最主要的线程也是叫db2sysc,这个主要的线程派生了其他子线程。当一个远程的应用程序比如采用sql connect语句链接服务器时,通讯协议的远程监听器将接收这个请求,并联系db2agent,agent是一个代表DB2实现一些小操作的处理程序,当发出请求的应用程序是本地的,也就是和DB2服务器在同一服务器上,如果不在同一个服务器上,那么采用db2tcpcm处理本地请求,如果在一台服务器上采用db2ipccm线程来处理请求。如果发生本地和异地并行的情况,db2agent会生成其他线程的代理db2agntp线程。其他的线程如db2pfchr、db2loggr、db2dlock它们应用到不同的目的。
DB2 DB2 9.5 进程信息:
db2sysc (Linux)
db2syscs (Win)
DB2的主系统控制器或者引擎,对于一个完整的分区其中只有一个包含多线程的主引擎进程。所有的引擎可以分派单元都是进程中的线程。没有这个进程数据库服务器是无法工作的。
db2acd:
主管运行状况监视器和自动维护实用程序的自主计算守护程序。此进程以前称为db2hmon
Db2wdong:
DB2的看门狗,是db2sysc的父进程。如果db2sysc集成非正常终止,它将清除所占用的资源。
Db2vend:
在主进程之外的围栏进程,所有db29.5的第三方代码都在这个进程中运行。
Db2fmp:
围栏进程,在防火墙外运行用户的存储程序和用户定义函数代码。此进程代替了db2老版本中的db2udf和db2dari进程。
DB2V9.5的线程信息:
Db2sysc:系统控制线程。负责实例的启动关闭和管理正在运行的实例。
Db2tcpcm:tcoip交互监听器
Db2agent:协调代理代表应用程序实现数据库操作
Db2agntp:如果intra-parallel的属性是yes,那么会产生活动的副代理。它会为应用程序执行数据库操作。Dbagent将协调不同的db2agntp副代理的工作。
Db2pfchr:db2异步io数据读取
Db2pclnr:db2异步io数据写入
Db2内存模型由不同区域构成,这里的内存是存在于实例层、数据库层、应用程序和代理层中的内存。
当一个实例启动后,系统就为数据库管理器分配共享的内存。这需要花费很大的空间。当第一次连接数据库时,就会分配数据库全局内存database global memory。在此内存块中,缓冲池是最重要的一个部分,尤其体现在改善系统查询的操作时。缓冲池的大小决定整个DGM的大小。每个代理可以使用大约3-5M内存,在没有连接集中器的情况下,几个链接可以使用一个代理。连接集中器一般可以理解为JDBC
Db2存储模型
数据页和扩展数据块:页是在db2中的最小存储单元。数据页大小允许为4k、8k、16k、32k。扩展数据块是一组数据页。由于每次处理一页会影响数据库的性能,所以db2以扩展数据块为单位进行处理。页大小和扩展数据块大小在使用缓冲池和表空间的时候定义。
缓冲池:是表和索引数据在内存中的缓存。减少持续直接的io存取,提供异步读取和写入来提高系统的性能。也就是说db2预测那些需要用到的数据页,然后再使用它们之前预先将它们读取到缓冲池。每个数据库至少需要一个缓冲池,而且对于每个表空间,至少必须存在一个符合制定大小的缓冲池。
Non-blocked和blocked区域表示数据页以块或者非块存在的数目。基于块的缓冲池保证硬盘上连续的移动块区域中,能够提高性能,页面数必须小于98%的缓冲池页面数目。
表空间:处于逻辑的数据表和系统物理内存缓冲池以及硬盘之间的逻辑接口。用create tablespace语句创建一个表空间,创建时制定如下的参数:页大小,缓冲池名称,扩展的大小,读取的大小。
表空间有三种
1、 常规表空间:用于用户的数据表,比如默认创建的userspace1
2、 大型表空间:可以作为原有数据表中分离lob数据的可选表空间。如果创建时指明purexml的支持,它也可以作为存储xml数据,在这种情况下,大型表空间是默认的表空间。
3、 临时表空间:系统临时和用户临时,系统临时用于db2的内存操作,比如排序比如tempspace,用户临时用于创建用户定义全局临时表,内存中的临时表。
表空间的管理有几种方式:
1、 系统管理,也成为system managed storage表空间,也就是SMS。由操作系统来管理。表空间使用的是操作系统文件系统的文件夹,存储空间不是预先分配的,但是表空间文件能够动态增长,当指定了容器后,它就在创建表空间时固定,以后不能再添加其他表空间容器,除非使用转向存储。
2、 由数据库管理,也叫数据库管理存储(DMS),它由db2来管理表空间的存储。这种表空间的管理需要数据库管理员的人工干预,能够预先分配容器或者裸设备。使用裸设备时,数据是直接写入到设备中而没有使用io缓存。这种管理方式能够增加、删除改变容器,性能好。
3、 自动存储管理,具备sms的自主管理特点又具备DMS的灵活性和高性能表现。所以从DB2V9.5开始这是默认的表空间类型。使用这种类型,用户首先指明一个逻辑存储设备组,不需要指明容器,容器在存储路径中自动创建。
数据是怎么存储在表空间的?
默认情况下,也就是自动存储管理,DB2每次写入到硬盘都会跨越若干个容器,例如,使用4K大小的dms表空间,扩展数据块页数为8,使用3个容器。这就是说,在写入下一个容器之前,会将32K数据(4k×8页/扩展块=32K)。
DB2目录也就是常见的DB2编目,它显示了所有您可以连接到的本地和远程数据库。对于本地数据库,将会有一个指针指向这个本地数据库目录。对于远程数据库,它将有一个指向结点目录。使用以下命令查看目录内容:
C:/IBM/SQLLIB/BIN>db2 list db directory
系统数据库目录
目录中的条目数 = 6
数据库 1 条目:
数据库别名 = EXPRESS2
数据库名称 = EXPRESS2
本地数据库目录 = C:
数据库发行版级别 = c.00
注释 =
目录条目类型 = 间接
目录数据库分区号 = 0
备用服务器主机名 =
备用服务器端口号 =
数据库 2 条目:
数据库别名 = TARGET
数据库名称 = TARGET
本地数据库目录 = C:
数据库发行版级别 = c.00
注释 = q复制目标数据库
目录条目类型 = 间接
目录数据库分区号 = 0
备用服务器主机名 =
备用服务器端口号 =
数据库 3 条目:
数据库别名 = EXPRESS
数据库名称 = EXPRESS
本地数据库目录 = C:
数据库发行版级别 = c.00
注释 =
目录条目类型 = 间接
目录数据库分区号 = 0
备用服务器主机名 =
备用服务器端口号 =
数据库 4 条目:
数据库别名 = GSDB
数据库名称 = GSDB
本地数据库目录 = C:
数据库发行版级别 = c.00
注释 = Version 2.1 for DSA2.1
目录条目类型 = 间接
目录数据库分区号 = 0
备用服务器主机名 =
备用服务器端口号 =
数据库 5 条目:
数据库别名 = NEWDB
数据库名称 = NEWDB
本地数据库目录 = C:
数据库发行版级别 = c.00
注释 =
目录条目类型 = 间接
目录数据库分区号 = 0
备用服务器主机名 =
备用服务器端口号 =
数据库 6 条目:
数据库别名 = SAMPLE
数据库名称 = SAMPLE
本地数据库目录 = C:
数据库发行版级别 = c.00
注释 =
目录条目类型 = 间接
目录数据库分区号 = 0
<