一、 体系架构
1、 DB2 UDB 体系结构
DB2 UDB 内存结构
? ? ?
包缓存 —— 为存储静态和动态 SQL 语句而分配的内存。
缓冲池 —— 在将数据刷新到磁盘之前,为存储数据而分配的内存。
日志缓冲区 —— 在将所有对数据库的更改刷新到磁盘上的日志之前,用来存储这些更改的内存。
2、 DB2 UDB 数据库结构
? ? ? ? ? ? ? ?
驱动器/目录 —— 在 CREATE DATABASE 命令中指定的驱动器或目录。 DB2 实例名称 —— DB2 实例所有者的名称。
NODE0000 —— 数据库的分区数。0 表示非分区的数据库。 SQL00001 —— 从 1 开始的数据库 ID。 SQLOGDIR —— 数据库的默认日志目录。 SQLT0000.0 —— 目录表空间 SYSCATSPACE。 SQLT0001.0 —— 临时表空间 TEMPSPACE1。 SQLT0002.0 —— 用户表空间 USERSPACE1
3、 DB2 UDB内存架构和后台进程
DB2 实例可以包含多个数据库,因此存在两个级别的配置。实例级的配置可以在 DBM CFG 文件中完成,而数据库级的配置则可以在 DB CFG 文件中完成。这两个级别上的配置参数都可以进行调整,以调优内存使用情况。
DB2 中主要有三种内存结构:
? ? ?
实例共享内存:这是数据库管理器全局共享内存,是在使用 db2start 命令启动实例时分配给实例的,并且在发出 db2stop 命令停止实例之前,一直处于已分配状态。
数据库共享内存:这是数据库全局内存,是在激活数据库或者第一次连接到数据库时分配的。分配的内存包括缓冲池、锁列表、数据库堆、实用程序堆、包缓存和编目缓存。
应用程序共享内存:这是在应用程序连接到一个数据库时分配的内存,由处理连接到数据库的客户机所请求的工作的代理使用。每个连接到数据库的应用程序都会被分配内存;因此,对会影响应用程序共享内存的参数的正确配置就非常重要。
在 DB2 for Windows 中,服务器活动是以线程的形式进行的,而在 Linux 和 UNIX 环境中,这些活动是以后台进程的形式来实现的。DB2 有以下几种级别的进程:
? 实例级:这些进程是在实例启动时初始化的:
1. DB2 Daemon Spawner(db2gds):全局守护处理程序,每个实例都对应一个这样的进程
(仅在 UNIX 中)
2. DB2 System Controller(db2sysc):DB2 主进程。 3. DB2 Watchdog(db2wdog):所有其他进程的父进程。
4. DB2 Format Log(db2fmtlg):类似于 Oracle 中的 ARCn 进程,为日志路径中的日志
文件预先分配空间。
? 数据库级:这些进程是在建立到数据库的连接时初始化的:
1. DB2 Log Reader(db2loggr):类似于 Oracle 的 PMON 进程的一个子集。该进程在回
滚、重启恢复和前滚期间读取日志文件。
2. DB2 Log Writer(db2logw):将日志从日志缓冲区刷新到磁盘上的事务日志文件中。相
当于 Oracle 中的 LGWR 进程。
3. DB2 Page Cleaner(db2pclnr):相当于 Oracle 中的 DBWR 进程,该进程在将页从磁
盘上转移到 BP 中之前,清理缓冲池。
4. DB2 Prefetcher(db2pfchr):将需要用到的页预先从磁盘取出到缓冲池中。 5. DB2 Deadlock Detector(db2dlock):死锁检测器进程。
? 应用程序级:每个连接到数据库的应用程序,都具有属于它自己的应用程序级后台进程与之相关联。这些进程有:
1. DB2 Communication Manager(db2ipccm):进程间通信进程,用于每个本地连接的客户
机。
2. DB2 TCP Manager(db2tcpcm):TCP 通信管理器进程,用于使用 TCP/IP 连接数据库的
远程客户机。
3. DB2 Coordinating Agent(db2agent):代表应用程序处理所有请求的进程。 4. DB2 Subagent(db2agnta):空闲子代理。
5. Active Subagent(db2agntp):在启用了 SMP 并行的情况下使用的活动子代理,它使
一个任务可以使用多个进程。
4、 DB2 UDB工作原理